假设我有以下脚本:
C.fsx
namespace FruitSalad
type Cherry =
{
Cherry : int
}
B.fsx
#load "./C.fsx"
namespace FruitSalad
type Banana =
{
Banana : int
Cherry : Cherry
}
A.fsx
#load "B.fsx"
#load "C.fsx"
open FruitSalad
type Apple =
{
Apple : int
Banana : Banana
Cherry : Cherry
}
let c =
{
Cherry = 3
}
let a =
{
Apple = 1
Banana =
{
Banana = 2
Cherry = c
}
Cherry = c
}
printfn "%A" a
运行A.fsx
会产生以下错误:
error FS0001:该表达式应具有“FSI_0001.FruitSalad.Cherry”类型
但是这里有'FSI_0002.FruitSalad.Cherry‘类型
我可以通过从#load "C.fsx"
中删除A.fsx
来解决这个问题。
但是,对于大得多的脚本项目来说,维护这一点是很尴尬的。
F#是否支持类似“包含一次”的内容,这样就没有必要这样做了吗?
发布于 2022-03-16 21:14:43
我同意费奥多的评论,即有一个项目可能更容易。请注意,您可以创建一个包含大量*.fs
文件的项目,但仍然有一个*.fsx
文件来加载来自项目的所有文件。这样,IDE将从项目中读取信息(并且所有的自动完成都能工作),但是您也可以从脚本文件中运行所有的东西,脚本文件只需要以正确的顺序#load
所有的*.fs
文件。
如果您喜欢坚持使用脚本,另一个可能对您有帮助的选择是同时对多个文件使用#load
。在上述情况下,您应该能够:
#load "./B.fsx" "./C.fsx"
这样,F#交互式将知道您同时加载这两个文件,并且在加载B.fsx
时不会创建单独的C.fsx
版本。
https://stackoverflow.com/questions/71500874
复制相似问题