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