我现在已经注意到了这几次。违规函数的一个示例是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
那么,是什么给出的?在此先感谢您的帮助。
答案 0 :(得分:4)
我怀疑你是否看到这是由于不同版本的F#。试图在F#4.0中规范许多List
Seq
和Array
函数,请参阅: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的引用,并重新添加正确的版本作为参考集会清单。