Class F#使用构造函数初始化结构内部的对象
我在F#中有以下结构:Class F#使用构造函数初始化结构内部的对象,class,struct,constructor,f#,initialization,Class,Struct,Constructor,F#,Initialization,我在F#中有以下结构: 但是我得到一个错误,说结构不能有空的构造函数。Class1是一个具有有效默认构造函数的类,需要在使用它之前进行初始化。因此,我希望class1在创建数据结构时调用其构造函数。我如何才能做到这一点,或者根本不应该这样做?正如Peter在评论中提到的,结构不能有没有参数的构造函数。事实上,如果您修改了语法(添加=符号),F#编译器会准确地告诉您: type public Data = struct val class1: Class1 new() = {
但是我得到一个错误,说结构不能有空的构造函数。Class1是一个具有有效默认构造函数的类,需要在使用它之前进行初始化。因此,我希望class1在创建数据结构时调用其构造函数。我如何才能做到这一点,或者根本不应该这样做?正如Peter在评论中提到的,结构不能有没有参数的构造函数。事实上,如果您修改了语法(添加
=
符号),F#编译器会准确地告诉您:
type public Data =
struct
val class1: Class1
new() = { class1 = new Class1() }
end
错误FS0870:结构不能具有没有参数的对象构造函数。这是对所有CLI语言的限制,因为结构自动支持默认构造函数
您最好的机会可能是创建一个结构,其中(可能是私有的)构造函数采用Class1
值,并添加一个静态方法,允许您使用数据创建默认实例。create()
:
[]
类型数据专用(class1:class1)=
静态成员Create()=数据(新类别1())
您可以使用struct。。结束
,但我个人更喜欢使用更简单的对象表示法,只添加Struct
属性。在.NET中,值类型(Struct)不能有没有参数的构造函数
type public Data =
struct
val class1: Class1
new() = { class1 = new Class1() }
end
[<Struct>]
type Data private(class1:Class1) =
static member Create() = Data(new Class1())