调试错误:'let'不能是Fsharp中块中的最终代码元素

0 f#

我的代码:

let main _ =

  let t = (System.Console.In.ReadLine ()) |> int

  for i in 1..t do
    let n = (System.Console.In.ReadLine ()) |> int

  0
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:这个'let'之后的块未完成.每个代码块都是一个表达式,必须有结果.'let'不能是块中的最终代码元素.考虑给这个块一个明确的结果.

你能帮助我吗 ?非常感谢你 .

Tom*_*cek 5

为了更详细地说明为什么需要这样做 - 在F#中,除了类型和模块定义之外,所有内容都是具有一些返回值的表达式.这甚至适用于这样的事情printf- 它们仍然返回值,但它是单位值,写为(),表示没有信息的虚拟值.

问题是它let <var> = <expr>不是一个完整的表达式,因为它不会返回任何内容.完整的形式是let <var> = <expr1> in <expr2>.这会将结果赋给<expr1>变量<var>并计算<expr2>并返回结果.如果您正在使用换行符,则可以省略in,但仍需要一些正文.

在你的例子中,最好的选择是使用()身体,因为你没有返回任何有用的东西.您可以使用in或使用换行符来编写此内容:

for i in 1..t do
  let n = (System.Console.In.ReadLine ()) |> int in ()

for i in 1..t do
  let n = (System.Console.In.ReadLine ()) |> int
  ()
Run Code Online (Sandbox Code Playgroud)

这不是一个非常有用的东西,因为你没有n在任何地方使用,但这是另一个问题.