gpt4 book ai didi

syntax - 为什么将表达式的第一行与 let 放在同一行无法编译?

转载 作者:行者123 更新时间:2023-12-02 09:23:26 26 4
gpt4 key购买 nike

在 F# 中,以下语句将失败并出现以下错误

let listx2 = [1..10]
|> List.map(fun x -> x * 2)
|> List.iter (fun x -> printf "%d " x)

Block following this 'let' is unfinished. Expect an expression.

Unexpected infix operator in binding. Expected incomplete structured construct at or before this point or other token.

但是以下内容将编译

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)

Possible incorrect indentation: this token is offside of context started at position (10:18). Try indenting this token further or using standard formatting conventions.

前两个语句有什么区别?

最佳答案

当你有

 let listx2 = [1..10]

您隐式地将下一行的缩进级别设置为与[相同的字符。正如规范中越位字符的以下规则所示:

Immediately after an = token is encountered in a Let or Member context.

因此,在第一个示例中,|> 的缩进小于 [,因此您会收到错误,但在第二个示例中它们是相同的,因此一切正常.

我不太确定为什么将 |> 移动到行尾只会给出警告。

关于syntax - 为什么将表达式的第一行与 let 放在同一行无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39312196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com