为什么这段F#代码无法编译?

3

这段代码可以被编译并运行:

let rec HelloEternalWorld _ = 
  Console.ReadLine() |> printf "输入: %s\n"
  HelloEternalWorld 0
HelloEternalWorld 0

这段代码不能被编译:

let rec HelloEternalWorld = 
  Console.ReadLine() |> printf "%s\n"
  HelloEternalWorld
HelloEternalWorld

我尝试理解为什么不能编译?

2个回答

7
您缺少的只是括号,如果它是这样编译的话,它应该是这样的:

let rec HelloEternalWorld() = 
  Console.ReadLine() |> printf "%s\n"
  HelloEternalWorld()


要定义一个没有参数的函数,你需要使用括号来区分函数和简单值。


4
请发布您收到的错误消息,它们包含了您所需的所有信息!
“值...将作为其自身定义的一部分进行评估。”
您的代码无法编译,因为您声明了一个递归值(不存在),而不是递归函数。
为使其成为函数,您需要编写类似以下的内容:
let rec HelloEternalWorld() = 
  Console.ReadLine() |> printfn "%s"
  HelloEternalWorld()

现在它是一个类型为unit -> unit的函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接