Hello world不会使用&#34编译;值或构造函数未定义"

时间:2017-07-02 20:52:26

标签: f#

let prefix prefixString baseString = 
    prefixString + " " + baseString

prefix "Hello" "World"

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

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

1 个答案:

答案 0 :(得分:7)

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

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

这是因为F#Interactive不知道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拥有自己独立的“世界状态”这一事实非常重要,因为它还意味着您需要在更改后重新运行函数,以便后续命令使用新定义。