为什么某些功能仅在F#脚本文件中可用,而不在源文件中?

时间:2015-12-26 22:49:41

标签: f# f#-interactive f#-scripting

我现在已经注意到了这几次。违规函数的一个示例是Array.take。在脚本文件中,我可以写

[|1; 2; 4; 7; 6; 5|]
|> Array.take 3
|> Array.iter (printfn "%d")

这没有问题。但是如果我尝试在实际的源文件中使用Array.take,我会收到以下错误

[|1; 2; 4; 7; 6; 5|]
|> Array.take 3 // RED SQUIGGLY ERROR HERE
|> Array.iter (printfn "%d")

,错误信息为:

The value, constructor, namespace or type 'take' is not defined

那么,是什么给出的?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

我怀疑你是否看到这是由于不同版本的F#。试图在F#4.0中规范许多List SeqArray函数,请参阅:https://visualfsharp.codeplex.com/wikipage?title=Status

作为该流程的一部分添加的其中一项功能是Array.take

在F#interactive中,毫无疑问您使用的是最新版本的F#,但可能您不在编译项目中。

这可能是因为您还没有更改项目设置中的版本,或者可能是因为您的项目附加了一个nuget包,它通过nuget引用了特定版本的F#Core。

如果您转到项目属性,您应该会看到一个目标F#运行时'设置,将其更改为F#4.0。如果我没记错的话,对特定F#Core版本的nuget引用将阻止您更改该设置,在这种情况下,您需要删除对F#core的引用,并重新添加正确的版本作为参考集会清单。