Class 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() = {

我在F#中有以下结构:


但是我得到一个错误,说结构不能有空的构造函数。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())