是否只编写与C#中的副作用自由编程等效的静态方法?
我有两个问题,源于观察到的C#静态方法的行为(我可能会误解):
第一: 第二: 编辑: 解决方法
静态方法与尾递归优化无关.所有rules同样适用于实例和静态方法,但我个人不会依赖JIT优化我的尾调用.而且,C# compiler doesn’t emit tail call instruction but sometimes it is performed anyway.简而言之,你永远不会知道. F#编译器支持尾递归优化,并在可能的情况下编译递归到循环.
这既不是也不是. 从技术上讲,没有什么可以阻止你从静态方法(这是一个静态方法本身!)调用Console.WriteLine,这显然有副作用.没有什么能阻止您编写不改变任何状态的类(使用实例方法)(即实例方法不访问实例字段).但是从设计的角度来看,这样的方法并不像实例方法那样有意义,对吗? 如果将项添加到.NET Framework列表< T> (有副作用),你会修改它的状态. 请注意,append确实是List模块上的静态方法.在单独的模块中编写“转换”方法可以鼓励无副作用的设计,因为根据定义,即使语言允许,也没有内部存储可用(F#,LISP没有).然而,没有什么能够真正阻止你编写一个无副作用的非静态方法. 最后,如果您想要了解功能语言概念,请使用一个!编写运行不可变F#数据结构的F#模块比使用静态方法或不使用静态方法在C#中模拟相同更自然. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |