如何在F#上的另一个类中声明一个对象?

时间:2019-05-14 13:58:07

标签: f#

我完全是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非常喜欢任何建议或解决方案。

谢谢。

埃玛。

1 个答案:

答案 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 }