详细语法在轻量模式F#下不起作用

时间:2018-09-27 20:14:28

标签: f#

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

这两个摘要之间的结构区别是什么?为什么启用轻量级语法时会生成错误?

1 个答案:

答案 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 ... donefor的内部块,let ... in ...是表达式f 6的块。

关于为何轻量化时会抱怨的可能性有两种:

  • 它可能是解析器中的错误。很少有人使用冗长的注释,可能没有引起注意。

  • 两个版本也不可能完全兼容。该文档确实说:

  

即使启用了轻量级语法,仍然可以使用冗长的语法   某些结构的语法。

注意它是怎么说“一些”而不是“全部”。