我在读this,现在想知道:F#中的评估顺序是什么?F#评估的顺序是什么?
显然;
使效果以顺序方式发生。但是,函数调用或应用程序,操作员评估顺序等等呢?
我瞥了一眼F#规范,但没有提到这一点。感谢您的任何见解!
我在读this,现在想知道:F#中的评估顺序是什么?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")
将打印“f”,“arg1”,“arg2”,“app1”,“app2”。然而这并没有使其成为规范。我会提交一个规格错误。
(所述spec的一些其它部分已经更明确的,例如
6.9.6评价方法应用
对于方法阐述应用中,表达的详尽形式将或者EXPR .M(args)或M(args)。
(可选)expr和args按照从左到右的顺序进行计算,成员在具有映射到相应参数值的形式参数的环境中进行评估。
如果expr的计算结果为null,则引发NullReferenceException。
如果该方法是一个虚拟调度槽(即声明为抽象的方法),则根据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
以获得更多关于它是多么容易搞砸与评估顺序。)
嘿,谢谢。事实上,如果你编码报价解释器,我就会问这个问题。如果您想确保EXACT与未加引号的代码相同,您需要知道F#评估顺序。 – Stringer 2011-01-23 00:09:40