当我构建我的解决方案时,一切都很顺利。但是,当我尝试在 FSI 中运行脚本时,我得到以下信息:
error FS0193: internal error: Could not load type 'Position' from assembly 'FSI-ASSEMBLY, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
我试图四处浏览,但我仍然不明白是什么导致了错误。从 MS connect 看来,fsi 编译器似乎存在问题,已经解决。
定义的代码片段Position
如下所示:
type Position =
struct
val Shares: NrShares
val BuyPrice: Price
new (nrShares: NrShares, buyPrice: float) = { Shares = nrShares; BuyPrice = buyPrice}
/// Merge two positions.
static member inline (+!) (one: Position, other: Position) =
let addToPosition (one: Position) (other: Position) =
let nrShares = one.Shares + other.Shares
let avgprice = (one.Shares * one.BuyPrice + other.Shares * other.BuyPrice) / nrShares
Position (nrShares, avgprice)
// Sell out or partially an existing position. Buy price is not updated
let sellFromPosition (one: Position) (other: Position) =
let newShares = one.Shares - other.Shares
Position (newShares, one.BuyPrice)
if (sign(one.Shares) = sign(other.Shares))
then addToPosition one other
else sellFromPosition one other
end
这里有什么问题?谢谢!
编辑一个
在我当前的设置中,我有一个 fsx 脚本LoadScript.fsx
,我在其中使用指令加载所需的 dll 文件,#r
然后使用指令打开所需的模块#open
。
LoadScript.fsx
由我编写实际计算的主要脚本调用。fsx 脚本链允许我隐藏样板代码。我只是向客户展示带有计算的主要脚本,一切看起来都更整洁。
这个脚本“链”fsx
一直在工作。直到昨天,当我从一个新.fs
文件中添加新模块时。
我正在尝试隔离产生问题的代码部分。这很难,因为error
消息没有指向特定的代码。
奇怪的是,当我直接运行时,LoadScript.fsx
一切都没有任何问题。LoadScript.fsx
当我从另一个脚本调用时,Fsi 编译失败:
#if INTERACTIVE
#load "LoadScript.fsx"
#endif
这种奇怪行为的原因可能是什么?有什么提示吗?