在这个问题的上下文中发现这种看似不一致的行为可以在 F#2.0 和 F#3.0 RC 中重现:
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
属性的泛型类型参数时存在一个错误。