编译此代码片段:
let test = let x = 1 printfn "%A" x
如果删除了最后一行,则会出现以下编译错误:
error FS0588: Block following this 'let' is unfinished. Expect an expression.
这条消息是什么意思?在C#/ C ++中,我希望在这种情况下出现“未使用的变量”警告,但F#会给出不同的结果。
答案 0 :(得分:16)
在F#中,函数必须将名称绑定到值。
printfn
语句有一个返回值,这最终会绑定到test
。
如果没有printfn
语句,您只有一个将值1绑定到x
的语句。编译器将期待一些必须测试的东西。因为测试函数此时停止,所以这就是你看到编译器错误的原因。
如果你希望你的功能只是为了做(可能有副作用),你应该用()