为什么有些函数只在F#脚本文件中可用,而在源文件中不可用?

为什么有些函数只在F#脚本文件中可用,而在源文件中不可用?,f#,f#-interactive,f#-scripting,F#,F# Interactive,F# Scripting,我已经注意到这几次了。有问题的函数的一个例子是数组。在脚本文件中,我可以编写 [|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

我已经注意到这几次了。有问题的函数的一个例子是
数组。在脚本文件中,我可以编写

[|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")
错误消息是:


那么,有什么好处呢?提前感谢您的帮助。

我想您看到这是因为F#的版本不同。曾试图规范F#4.0中的许多
列表
序列
数组
函数,请参见:

作为该过程的一部分添加的函数之一是
Array.take

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

这可能是因为您没有更改项目设置中的版本,也可能是因为您的项目附带了一个nuget包,该包通过nuget引用了特定版本的F#Core


如果转到项目属性,您应该会看到一个“目标F#Runtime”设置,将其更改为F#4.0。如果我没记错的话,对特定F#Core版本的nuget引用将阻止您更改该设置,在这种情况下,您需要删除对F#Core的引用,并从程序集列表中重新添加正确的版本作为引用。

我怀疑您看到这是由于不同版本的F#。曾试图规范F#4.0中的许多
列表
序列
数组
函数,请参见:

作为该过程的一部分添加的函数之一是
Array.take

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

这可能是因为您没有更改项目设置中的版本,也可能是因为您的项目附带了一个nuget包,该包通过nuget引用了特定版本的F#Core

如果转到项目属性,您应该会看到一个“目标F#Runtime”设置,将其更改为F#4.0。如果我没记错的话,对特定F#Core版本的nuget引用将阻止您更改该设置,在这种情况下,您需要删除对F#Core的引用,并从程序集列表中重新添加正确的版本作为引用。

目标F#Runtime
设置为
4.3.0.0
,并显示为灰色。该项目正在使用
FSharp.Core
版本4.3.0.0
。尽管如此,我还是遇到了一个问题。@F#Core 4.3.0.0对应于F#3.0。F#4.0使用F#核心版本4.4.0.0。删除对F#Core的引用,并将其从
扩展
程序集列表中重新添加。
目标F#运行时
设置为
4.3.0.0
,并灰显。该项目正在使用
FSharp.Core
版本4.3.0.0
。尽管如此,我还是遇到了一个问题。@F#Core 4.3.0.0对应于F#3.0。F#4.0使用F#核心版本4.4.0.0。删除对F#Core的引用,并将其从
扩展
程序集列表中重新添加。
The value, constructor, namespace or type 'take' is not defined