Microsoft F#手册在F#中说verbose syntax is always enabled。如果我正确理解,则意味着无论是否启用轻量级语法,使用冗长语法编写的F#代码都必须产生相同的结果。
但是,下面的代码片段将数字6打印十次
#light "off"
let f x = for i = 1 to 10 do printfn "%d" x done in f 6
当以下内容生成错误时:Unexpected keyword 'in' in binding. Expected incomplete structured construct at or before this point or other token.
let f x = for i = 1 to 10 do printfn "%d" x done in f 6
这两个摘要之间的结构区别是什么?为什么启用轻量级语法时会生成错误?
答案 0 :(得分:0)
详细代码:
#light "off"
let f x = for i = 1 to 10 do printfn "%d" x done in f 6
等效于以下轻量级代码:
let f x =
for i = 1 to 10 do
printfn "%d" x
f 6
在轻量模式下,缩进定义了块,在详细模式下,do ... done
是for
的内部块,let ... in ...
是表达式f 6
的块。
关于为何轻量化时会抱怨的可能性有两种:
它可能是解析器中的错误。很少有人使用冗长的注释,可能没有引起注意。
两个版本也不可能完全兼容。该文档确实说:
即使启用了轻量级语法,仍然可以使用冗长的语法 某些结构的语法。
注意它是怎么说“一些”而不是“全部”。