let prefix prefixString baseString = 
    prefixString + " " + baseString
prefix "Hello" "World"
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,我收到了错误 Stuff.fs(34,1): error FS0039: The value or constructor 'prefix' is not defined.
我不完全确定为什么会这样,因为我正在观看关于F#的视频系列,其中字面上相同的代码正在编译并成功运行.我的环境有问题吗?
在评论中,您提到使用"运行选择"命令运行代码段.此命令在F#Interactive中运行选定的代码段,该代码段最初不包含任何定义.因此,如果您选择并运行最后一行,您将获得:
> prefix "Hello" "World";;
stdin(1,1): error FS0039: The value or constructor 'prefix' is not defined
Run Code Online (Sandbox Code Playgroud)
这是因为F#Interactive不知道prefix它的定义是什么- 它不会在您的文件中自动查找.您可以通过选择所有内容并在单个交互中运行所有代码来解决此问题,或者您可以先运行定义然后运行最后一行,即:
> let prefix prefixString baseString = 
    prefixString + " " + baseString;;
val prefix : prefixString:string -> baseString:string -> string
> prefix "Hello" "World";;
val it : string = "Hello World"
Run Code Online (Sandbox Code Playgroud)
请注意,当您运行第一个命令时,F#Interactive将打印已定义函数的类型,以便您可以查看刚刚定义的内容.
F#Interactive拥有自己独立的"世界状态"这一事实非常重要,因为它还意味着您需要在更改后重新运行函数,以便后续命令使用新定义.