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以外的值结束作用域时,应产生编译器警告。