【问题标题】:F# initialize objects inside struct with constructorF#使用构造函数初始化结构内的对象
【发布时间】:2015-04-29 20:05:45
【问题描述】:

我在 F# 中有以下结构:

type public Data = 
    struct
        val class1: Class1
        new() {
            class1 = new Class1()
        }
    end

但是我得到一个错误,说结构不能有一个空的构造函数。 Class1 是一个具有有效默认构造函数的类,需要在使用前进行初始化。因此,我希望 class1 在创建 Data 结构时调用其构造函数。我该怎么做,或者我根本不应该这样做?

【问题讨论】:

  • 在 .NET 中,值类型(结构)不能有没有参数的构造函数

标签: class struct constructor f# initialization


【解决方案1】:

正如 Peter 在 cmets 中提到的,结构不能有没有参数的构造函数。事实上,如果您修正语法(添加 = 符号),F# 编译器会准确告诉您:

type public Data = 
  struct
    val class1: Class1
    new() = { class1 = new Class1() }
  end

错误 FS0870:结构不能有没有参数的对象构造函数。这是对所有 CLI 语言的限制,因为结构自动支持默认构造函数。

您最好的机会可能是创建一个带有(可能是私有的)构造函数的结构,该构造函数采用 Class1 值,并添加一个静态方法,让您可以使用 Data.Create() 创建默认实例:

[<Struct>]
type Data private(class1:Class1) =
  static member Create() = Data(new Class1())

您也可以使用struct .. end 编写此代码,但我个人更喜欢使用更简单的对象表示法,只需添加Struct 属性即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多