F# 调试错误:';让';不能是Fsharp中块中的最终代码元素

F# 调试错误:';让';不能是Fsharp中块中的最终代码元素,f#,F#,我的代码: let main _ = let t = (System.Console.In.ReadLine ()) |> int for i in 1..t do let n = (System.Console.In.ReadLine ()) |> int 0 我得到的错误如下: 此“let”后面的块未完成。每个代码块都是一个表达式,必须有一个结果。”let'不能是块中的最终代码元素。考虑给这个块一个明确的结果。< /P> 你能帮我吗?非常感谢。在for

我的代码:

let main _ =

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

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

  0
我得到的错误如下: 此“let”后面的块未完成。每个代码块都是一个表达式,必须有一个结果。”let'不能是块中的最终代码元素。考虑给这个块一个明确的结果。< /P>
你能帮我吗?非常感谢。

在for循环中,最后一条语句是
let
。向同一级别添加缩进的0应该可以解决for循环中的问题,最后一条语句是
let
。将缩进的0添加到同一级别应该可以解决问题

谢谢John Palmer。我学到了很多东西。这就是问题的结果:

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

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

    printf("%d\n") n

    0

0

谢谢约翰·帕默。我学到了很多东西。这就是问题的结果:

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

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

    printf("%d\n") n

    0

0

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

问题是
let=
不是一个完整的表达式,因为它不返回任何内容。完整的表单是
let=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
  ()

写这篇文章并不是很有用,因为您没有在任何地方使用
n
,但这是另一个问题。

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

问题是
let=
不是一个完整的表达式,因为它不返回任何内容。完整的表单是
let=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
  ()

这不是很有用的东西,因为您没有在任何地方使用
n
,但这是另一个问题。

您可以删除内部0。编译器只希望缩进范围内的最后一行是表达式
printf(“%d\n”)n
是一个计算为单位值
()
的表达式,因此该代码已经对该值有效。事实上,按原样,内部0应该会产生编译器警告。您可以删除内部0。编译器只希望缩进范围内的最后一行是表达式
printf(“%d\n”)n
是一个计算为单位值
()
的表达式,因此该代码已经对该值有效。事实上,内部0应该会产生一个编译器警告。为什么
0
(零)?你是说
()
(单位)吗?在for循环中使用除unit以外的值结束作用域时,应产生编译器警告。为什么
0
(零)?你是说
()
(单位)吗?在for循环中使用除unit以外的值结束作用域时,应产生编译器警告。