f# – Hello world将无法编译“未定义值或构造函数”

let prefix prefixString baseString = 
    prefixString + " " + baseString

prefix "Hello" "World"

使用上面的代码我得到错误Stuff.fs(34,1):错误FS0039:未定义值或构造函数’prefix’.

我不完全确定为什么会这样,因为我正在观看F#上的video series,其中字面上相同的代码正在编译并成功运行.我的环境有问题吗?

最佳答案
在评论中,您提到使用“运行选择”命令运行代码段.此命令在F#Interactive中运行选定的代码段,该代码段最初不包含任何定义.因此,如果您选择并运行最后一行,您将获得:

> prefix "Hello" "World";;
stdin(1,1): error FS0039: The value or constructor 'prefix' is not defined

这是因为F#Interactive不知道前缀的定义是什么 – 它不会在您的文件中自动查找.您可以通过选择所有内容并在单个交互中运行所有代码来解决此问题,或者您可以先运行定义,然后运行最后一行,即:

> let prefix prefixString baseString = 
    prefixString + " " + baseString;;
val prefix : prefixString:string -> baseString:string -> string

> prefix "Hello" "World";;
val it : string = "Hello World"

请注意,当您运行第一个命令时,F#Interactive将打印已定义函数的类型,以便您可以查看刚刚定义的内容.

F#Interactive拥有自己独立的“世界状态”这一事实非常重要,因为它还意味着您需要在更改后重新运行函数,以便后续命令使用新定义.

转载注明原文:f# – Hello world将无法编译“未定义值或构造函数” - 代码日志