你好世界不会用"The value or constructor is not defined"编译


let prefix prefixString baseString = 
prefixString + " " + baseString
prefix "Hello" "World"

使用上面的代码,我得到错误Stuff.fs(34,1): error FS0039: The value or constructor 'prefix' is not defined.

我不完全确定为什么会发生这种情况,因为我正在观看有关 F# 的视频系列,其中实际上相同的代码正在编译并成功运行。我的环境有问题吗?

在评论中,您提到您正在使用"运行选择"命令运行代码段。此命令在 F# 交互中运行选定的代码段,该代码段最初不包含任何定义。因此,如果仅选择并运行最后一行,您将获得:

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

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

> 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 具有自己独立的"世界状态"这一事实非常重要,因为这也意味着在更改函数后需要重新运行函数,以便后续命令使用新定义。

最新更新