2015-12-26 3 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 #. Там была попытка легализовать много из ListSeq и Array функций F # 4.0, см: https://visualfsharp.codeplex.com/wikipage?title=Status

Одна из функций, которые были добавлены как часть этого процесса была Array.take.

В F # interactive, без сомнения, вы используете последнюю версию F #, но, предположительно, вы не находитесь в своем скомпилированном проекте.

Возможно, это связано с тем, что вы не изменили версию в настройках проекта или это может быть связано с тем, что у вас есть пакет nuget, связанный с вашим проектом, который ссылается на определенную версию F # Core через nuget.

Если вы перейдете к своим свойствам проекта, вы увидите настройку «Целевой F # Runtime», измените это на F # 4.0. Если я правильно помню, ссылка nuget на конкретную версию F # Core не позволит вам изменить этот параметр, и в этом случае вам нужно будет удалить ссылку на ядро ​​F # и повторно добавить правильную версию в качестве ссылки из списка сборок.

+0

'Target F # Runtime' установлен в' 4.3.0.0' и выделен серым цветом. Проект использует 'version 4.3.0.0'' FSharp.Core'. Несмотря на это, я столкнулся с проблемой. – 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