看看Operator Precedence表,我很困惑lambda表达式适合所有这些。对表1至25(从最低到最高优先级)编号,我看到用于组成lambda表达式的两个密钥:fun
是非关联6,而->
是右关联8.也就是fun ... -> ...
。这可能是我理解的第一个错误,因为我甚至不知道优先级是否在lambda表达式的主体中起作用(->
的右侧)我只能想到在整个表达式中扮演角色的优先级,所以我会继续前往那里。根据此表,序列运算符;
的优先级为4,比“运算符”的优先级低4。我相信说帮我理解lambda表达式优先
fun (x:int) -> x + 3 ; 2;;
应相当于
((fun (x:int) -> (x + 3)) ; 2);;
但它实际上相当于
(fun (x:int) -> (x + 3 ; 2));;
我感谢澄清我的给出的优先规则的解释任何帮助所引用的表格与lambda表达式的实际优先规则!谢谢!
哈哈,我知道桌子不好(和规范是没有太大的帮助)!但是我对使用序列操作符和深入理解优先规则都有很好的理由;)。看看F#解析器有没有什么帮助,或者会不熟悉fslex/fsyacc的人完全丢失?任何其他建议,以掌握优先规则?谢谢! – 2011-02-01 05:59:59