2015-12-26 31 views
0

我已經注意到這幾次了。有問題的功能的一個例子是Array.take。在腳本文件中,我可以編寫爲什麼某些功能僅在F#腳本文件中可用,而不是在源文件中?

[|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 

那麼,是什麼原因呢?在此先感謝您的幫助。

回答

4

我懷疑你看到這是由於F#的不同版本。有以規範了很多在F#4.0的ListSeqArray功能的嘗試,請參閱:https://visualfsharp.codeplex.com/wikipage?title=Status

一個作爲這一進程的一部分是Array.take已添加的功能。在F#交互式中,毫無疑問,您使用的是最新版本的F#,但大概您並不在編譯的項目中。

這可能是因爲您尚未更改項目設置中的版本,或者可能是因爲您有一個nuget包附加了您的項目,該項目通過nuget引用了特定版本的F#Core。

如果你去你的項目屬性,你應該看到'Target F#Runtime'設置,將其更改爲F#4.0。如果我沒有記錯,對特定F#Core版本的nuget引用將阻止您更改該設置,在這種情況下,您需要刪除對F#內核的引用,並重新添加正確的版本作爲參考組件。

+0

'Target F#Runtime'設置爲'4.3.0.0'並呈灰色。該項目使用'FSharp.Core'的'4.3.0.0版本'。儘管如此,我遇到了這個問題。 – Shredderroy

+3

@Shredderroy F#Core 4.3.0.0對應於F#3.0。 F#4.0使用F#Core版本4.4.0.0。刪除對F#Core的引用,並從'Extensions'程序集列表中重新添加它。 – TheInnerLight

+0

啊,非常感謝! – Shredderroy

相關問題