使用需要默认构造函数的泛型记录

Dav*_*ave 1 f#

我想使用一个数据结构的记录,要求其类型具有默认构造函数.不幸的是,这会导致编译时错误.

除了改变数据结构(这里不可能).或者将记录更改为某种类型(需要在哪里添加类型注释)在这种情况下您有哪些选项?

我想可以将记录包装在一个结构中,但这感觉就像黑客.

Joe*_*ler 7

尝试将CLIMutable属性添加到您的记录中。


lat*_*kin 7

这似乎已在F#3.1中修复.考虑以下代码:

[<CLIMutable>]
type R = {a : int}

let f<'a when 'a : (new : unit -> 'a)>() = new 'a()

let r = f<R>()
Run Code Online (Sandbox Code Playgroud)

在F#3.0(VS 2012)中,最后一行出错 - error FS0001: A generic construct requires that the type 'R' have a public default constructor

但它适用于F#3.1(尚未实施RTM,但本周早些时候公开预发布)