在F#中,以下语句将失败,并显示以下错误
let listx2 = [1..10]
|> List.map(fun x -> x * 2)
|> List.iter (fun x -> printf "%d " x)
阻止这样做'让'尚未完成。期待一个表达。
绑定时出现意外的中缀操作符。在此点或其他标记之前或之前的预期不完整结构化构造。
但是以下将编译
let listx2 =
[1..10]
|> List.map(fun x -> x * 2)
|> List.iter (fun x -> printf "%d " x)
我也注意到这个编译但有警告
let listx2 = [1..10] |>
List.map(fun x -> x * 2) |>
List.iter (fun x -> printf "%d " x)
可能的错误缩进:此标记在位置(10:18)开始的上下文越位。尝试进一步缩进此标记或使用标准格式约定。
前两个陈述有什么区别?
答案 0 :(得分:7)
当你有
时 let listx2 = [1..10]
您隐式将下一行的缩进级别设置为与[
相同的字符。由规范中的越位字符的以下规则给出:
在Let或Member上下文中遇到= token之后。
所以在第一个例子中,|>
缩进小于[
所以你得到一个错误,但在第二个例子中它们是相同的,所以一切正常。
我不太清楚为什么将|>
移到行尾但只会发出警告。