(F#, моно для OS X) В коде Visual Studio произошли ошибки, но файл был успешно отправлен в fsi (fsi: отправить файл)
У меня есть ошибки со следующими кодами в коде Visual Studio. Однако я могу отправить файл с помощью команды (fsi:send file), и он успешно выполнен. Кажется, я не настроил VSC с Ionide должным образом. Пожалуйста, не стесняйтесь комментировать.
#load "packages/MathNet.Numerics.FSharp.3.14.0-beta01/MathNet.Numerics.fsx"
open MathNet.Numerics
SpecialFunctions.Gamma(0.5) // Unexpected identifier in implementation file
open MathNet.Numerics.LinearAlgebra
let m : Matrix<float> = DenseMatrix.randomStandard 50 50
(m * m.Transpose()).Determinant()
Проверка синтаксиса на наличие ошибок и ошибок в vscode, но код может быть выполнен в fsi
- Эта директива может использоваться только в файлах сценариев F# (расширения.fsx или.fsscript). Удалите директиву, переместите этот код в файл сценария или разграничите директиву с помощью "#if INTERACTIVE" / "#endif"
- Пространство имен или модуль "MathNet" не определены.
- Неожиданный идентификатор в файле реализации
1 ответ
Первая ошибка, "Эта директива может использоваться только в файлах сценариев F# (расширения.fsx или.fsscript)", говорит вам, как ее решить. Вы не сообщили нам имя файла F#, в котором вы получаете ошибки, но я уверен, что это заканчивается .fs
, право? .fs
Расширение предназначено для файлов, которые являются частью большого проекта. Хорошее эмпирическое правило заключается в том, что если у вас есть какие-либо .fs
файлы, вам нужен файл проекта (в настоящее время это будет в .fsproj
формат, который является уродливым файлом XML, но VS Code может помочь вам создать его).
Если вы хотите использовать #load
директива, она должна быть в файле сценария F#, что означает файл с .fsx
расширение. (The .fsscript
расширение также разрешено, но я никогда не видел, чтобы кто-нибудь использовал его на практике. .fsx
расширение является стандартом де-факто).
Просто переименуйте ваш .fs
подать в .fsx
и это должно решить ошибку № 1. Тогда ошибки № 2 и № 3 должны исчезнуть сами по себе - они происходят, потому что компилятор F# не загружает MathNet
пространство имен, потому что оно игнорирует #load
директива в .fs
файл. Однажды #load
директива обрабатывается, то MathNet.Numerics.fsx
Файл должен быть загружен, и этот файл, в свою очередь, загружает все необходимые пространства имен.
Так что это было просто потому, что вы сохранили файл как .fs
файл, когда вам нужно .fsx
,