我完全是F#的新手,并且试图创建一个包含其他类的另一个实例的对象。对我来说,在C#中这很容易,但是在F#中,我很难理解它。
这是我的代码
module Owe
type Owe= class
val Name: string
val Amount: float
new (name, amount) as this =
{
Name = name
Amount = amount
}
end
这是我想使用Owe对象安装的类...。但是,我无法使用Owe属性。
module Roomate
type Roomate = class
val Name : string
val Owe: module.Owe //Error!
new(name, owe) as this =
{
Name = name
Owe = owe
}
end
我Reallay非常喜欢任何建议或解决方案。
谢谢。
埃玛。
答案 0 :(得分:3)
您可能会遇到错误,因为module.Owe
不是从另一个模块引用类型的正确方法。您在这里不需要module
关键字-您只需要像<module-name>.<class-name>
中那样提供模块名称和类名称。在您的情况下,有些混乱,模块名称和类名称均为Owe
,因此您可以编写Owe.Owe
。
要记住的另一件事是,在F#中,文件的顺序很重要。这意味着您只能引用项目中较早出现的文件中的类。
最后,我还要补充一点,在F#的一个文件(和一个模块)中声明多种类型是很普遍的,因此您无需将定义移到单独的文件中。我还建议使用lightweitght语法使用隐式构造函数声明类:
type Owe(name:string, amount:float) =
member x.Name = name
member x.Amount = amount
type Roomate(name:string, owe:Owe) =
member x.Name = name
member x.Owe = owe
尽管在这种情况下,您可能根本不需要类,并且可能只使用记录:
type Owe = { Name:string; Amount:float }
type Roomate = { Name:string; Owe:Owe }