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

时间:2013-06-27 20:01:42

标签: f#

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

let r = f<R>()

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

但它适用于F#3.1(尚不是RTM,但是public pre-release was earlier this week

答案 1 :(得分:4)

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