f# - 如何在 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
我真的很感激任何建议或解决方案。
提前致谢。
艾玛。
解决方案
您可能会遇到错误,因为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 }
推荐阅读
- javascript - OBJLoader.js:459 Uncaught TypeError: Cannot read property 'itemError' of undefined in THREE.js using MTLLoader and OBJLoader to load a model
- php - 发送和接收多个 JSON 文字 PHP Socket
- java - 将 RestTemplate 用于 Rest API 时出现 400 错误代码
- react-native - 如何提高视频和图片上传速度 React Native
- python - 无法为 sublimetext 执行 python
- java - 元素不可点击问题 Selenium
- python - 带有布尔值的 While 循环导致运行时错误
- javascript - 定位固定底部时卡住模态
- javascript - 更新对象数组而不添加来自另一个对象的新属性
- arrays - 通过 console.log 显示角度 8 的可观察数组