この質問の文脈で発見されると、この一見一貫性のない動作は、F#2.0とF#3.0RCの両方で次のように再現できます。
type Heterogeneous =
static member Echo([<ParamArray>] args: Object[]) = args
type Generic =
static member Echo<'T>([<ParamArray>] args: 'T[]) = args
使用法:戻り値:
Heterogeneous.Echo 0 // [|0|] OK
Generic.Echo 0 // [|0|] OK
Heterogeneous.Echo (0,1) // [|0; 1|] OK
Generic.Echo (0,1) // [|0; 1|] OK
Heterogeneous.Echo [|0|] // [|[|0|]|] OK?
Generic.Echo [|0|] // [|0|] OOPS!!
Heterogeneous.Echo ([|0|],[|1|])) // [|[|0|]; [|1|]|] OK
Generic.Echo ([|0|],[|1|])) // [|[|0|]; [|1|]|] OK
観察された動作がバグなのか機能なのかを誰かが説明できますか?
更新:
この関連する回答は、F#開発チームからの確認を伝えており、現在、ParamArray
属性を持つ汎用型引数の処理にバグがあります。