Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 向泛型函数定义添加多个约束(为什么必须内联)?_Generics_F# - Fatal编程技术网

Generics 向泛型函数定义添加多个约束(为什么必须内联)?

Generics 向泛型函数定义添加多个约束(为什么必须内联)?,generics,f#,Generics,F#,我想给我的泛型函数添加2个约束。构造函数约束和成员约束 let somefn<'T when 'T : (new : unit -> 'T) and 'T : (member Add : 'T -> unit)> v = new 'T() 我真的不明白这个错误信息 仅当我将定义更改为: let inline somefn<'T when 'T : (new : unit -> 'T) and 'T : (member Add : 'T -> ...

我想给我的泛型函数添加2个约束。构造函数约束和成员约束

let somefn<'T when 'T : (new : unit ->  'T) and 'T : (member Add : 'T -> unit)> v = new 'T()
我真的不明白这个错误信息

仅当我将定义更改为:

let inline somefn<'T when 'T : (new : unit ->  'T) and 'T : (member Add : 'T -> ...
让内联somefn'T)和'T:(成员添加:'T->。。。
它开始工作了


有人能解释一下吗。

泛型类型参数上的成员约束仅支持内联定义,因为.NET类型系统不支持它们,所以您的定义不能编译为普通的.NET泛型函数。相反,编译器将在每个调用站点内联定义的副本(例如,在调用站点调用正确的
Add
方法(如果您的定义使用了该方法).

泛型类型参数的成员约束仅支持内联定义,因为.NET类型系统不支持它们,因此无法将您的定义编译为普通的.NET泛型函数。相反,编译器将在每个调用站点内联定义的副本(例如,在调用站点调用正确的
Add
方法(如果您的定义使用)

let inline somefn<'T when 'T : (new : unit ->  'T) and 'T : (member Add : 'T -> ...