F# 使用构造函数初始化结构内部的对象
F# initialize objects inside struct with constructor
我在 F# 中有以下结构:
type public Data =
struct
val class1: Class1
new() {
class1 = new Class1()
}
end
但是我收到一条错误消息,指出结构不能有空的构造函数。 Class1 是一个 class 具有有效的默认构造函数,需要在使用前进行初始化。因此,我希望 class1 在创建 Data 结构时调用其构造函数。我该怎么做,或者我根本不应该这样做?
正如 Peter 在评论中提到的,结构不能有不带参数的构造函数。事实上,如果您修改语法(添加 =
符号),F# 编译器会准确地告诉您:
type public Data =
struct
val class1: Class1
new() = { class1 = new Class1() }
end
error FS0870: Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor.
你最好的机会可能是创建一个结构(可能是私有的)构造函数采用 Class1
值,并添加一个静态方法,让你使用 Data.Create()
创建默认实例:
[<Struct>]
type Data private(class1:Class1) =
static member Create() = Data(new Class1())
您也可以使用 struct .. end
编写此代码,但我个人更喜欢使用更简单的对象表示法,只需添加 Struct
属性即可。
我在 F# 中有以下结构:
type public Data =
struct
val class1: Class1
new() {
class1 = new Class1()
}
end
但是我收到一条错误消息,指出结构不能有空的构造函数。 Class1 是一个 class 具有有效的默认构造函数,需要在使用前进行初始化。因此,我希望 class1 在创建 Data 结构时调用其构造函数。我该怎么做,或者我根本不应该这样做?
正如 Peter 在评论中提到的,结构不能有不带参数的构造函数。事实上,如果您修改语法(添加 =
符号),F# 编译器会准确地告诉您:
type public Data =
struct
val class1: Class1
new() = { class1 = new Class1() }
end
error FS0870: Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor.
你最好的机会可能是创建一个结构(可能是私有的)构造函数采用 Class1
值,并添加一个静态方法,让你使用 Data.Create()
创建默认实例:
[<Struct>]
type Data private(class1:Class1) =
static member Create() = Data(new Class1())
您也可以使用 struct .. end
编写此代码,但我个人更喜欢使用更简单的对象表示法,只需添加 Struct
属性即可。