首页 > 解决方案 > 如何在 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

我真的很感激任何建议或解决方案。

提前致谢。

艾玛。

标签: f#

解决方案


您可能会遇到错误,因为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 }

推荐阅读