Str*_*ger 4 f# operator-precedence
我正在读这个,现在想知道:F#中的评估顺序是什么?
显然;,效果会以顺序方式发生.但是,如函数调用或应用程序,运算符的评估顺序等等.
我瞥了一眼F#规格,但没有提到.感谢您的任何见解!
我发现了一些电子邮件,我们修复了实现以获得严格的应用程序顺序.代码
open System
let f a =
Console.WriteLine "app1";
fun b ->
Console.WriteLine "app2";
()
(Console.WriteLine "f"; f) (Console.WriteLine "arg1") (Console.WriteLine "arg2")
Run Code Online (Sandbox Code Playgroud)
将打印"f","arg1","arg2","app1","app2".然而,这并没有成为规范.我将提交规范错误.
(规范的其他一些部分已经更明确,例如
6.9.6评估方法应用
对于方法的详细应用,表达式的详细形式将是expr.M(args)或M(args).
(可选)expr和args按从左到右的顺序进行计算,成员的主体在具有映射到相应参数值的形式参数的环境中进行求值.
如果expr求值为null,则引发NullReferenceException.
如果该方法是虚拟调度槽(即,声明为abstract的方法),则根据expr值的调度映射选择成员的主体.
也就是说,一些专家认为,如果您不依赖评估订单,您将过上更长寿,更幸福的生活.:))
(可能还会看到
http://blogs.msdn.com/ericlippert/archive/2009/11/19/always-write-a-spec-part-one.aspx
http://blogs.msdn.com/ericlippert/archive/2009/11/23/always-write-a-spec-part-two.aspx
更多关于如何轻松搞定评估订单.)