1

我在 Visual Studio 代码中遇到以下代码错误。但是,我可以使用命令(fsi:send file)发送文件,并且成功执行。看来我没有用 Ionide 正确设置 VSC。请随意发表评论。

#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中执行

  1. 此指令只能在 F# 脚本文件(扩展名 .fsx 或 .fsscript)中使用。删除指令,将此代码移动到脚本文件或使用 '#if INTERACTIVE'/'#endif' 分隔指令
  2. 未定义命名空间或模块“MathNet”。
  3. 实现文件中的意外标识符
4

1 回答 1

2

第一个错误“此指令只能在 F# 脚本文件(扩展名 .fsx 或 .fsscript)中使用”告诉您如何解决它。您还没有告诉我们您遇到错误的 F# 文件的文件名,但我敢打赌它以 . 结尾.fs,对吧?该.fs扩展适用于属于较大项目的文件。一个好的经验法则是,如果您有任何.fs文件,则需要一个项目文件(目前将采用.fsproj格式,这是一个丑陋的 XML 文件,但 VS Code 可以帮助您创建它)。

如果要使用该#load指令,则它必须位于 F#脚本文件中,即带有.fsx扩展名的文件。(.fsscript扩展名也是允许的,但我从未见过有人在实践中使用它。.fsx扩展名是事实上的标准)。

只需将.fs文件重命名为即可.fsx解决错误 #1。然后错误 #2 和 #3 应该会自行消失——它们的发生是因为 F# 编译器没有加载MathNet命名空间,这是因为它忽略了文件#load中的指令。.fs处理#load指令后,MathNet.Numerics.fsx应该加载文件,然后该文件会加载所有需要的命名空间。

.fs所以这仅仅是因为您在需要时将文件保存为文件.fsx

于 2016-11-05T11:52:14.557 回答