如果我想为标准偏差定义浮点数组的扩展方法,那么在数组模块上使用模块扩展或在类型float[]
上使用扩展名会更好吗?
喜欢:
module Array =
let std (arr: float[]) = ...
或
type float ``[]`` with
member this.std = ...
如果我按后者键入扩展名,std
只能计算一次或每次使用吗?
而且,对于后者来说,正确的格式是什么,type float ``[]`` with
显然不会... ...谢谢。
答案 0 :(得分:5)
在这种情况下,您无法定义类型扩展名,因此问题没有实际意义 - 您必须使用Array
模块的扩展名。您无法定义类型扩展的原因是,在F#中,类型扩展必须完全镜像类型定义,因此您可以在通用'a list
类型上定义类型扩展,但不能在构造类型上定义string list
。同样,您可以在(模拟)通用数组类型
'a ``[]``
但不在构造的数组类型
上float ``[]``
此行为与C#不同,在C#中可以在构造的泛型类型上编写扩展方法。