这是类似C#问题的毫不掩饰的尝试.
那么你最喜欢的F#隐藏(或不是)功能是什么?
到目前为止,我使用的大部分功能并没有完全隐藏,但却非常令人耳目一新.就像C#或VB.NET相比,重载运算符是多么微不足道.
并Async<T>帮助我削减了一些真正丑陋的代码.
我对这种语言还很陌生,所以了解野外使用的其他功能会很棒.
我正在尝试定义一个函数,factorize,它使用类似于Seq.sum的结构类型约束(需要静态成员Zero,One,+和/),以便它可以与int,long,bigint等一起使用.I似乎无法获得正确的语法,并且无法在该主题上找到很多资源.这就是我所拥有的,请帮助.
let inline factorize (n:^NUM) =
^NUM : (static member get_Zero: unit->(^NUM))
^NUM : (static member get_One: unit->(^NUM))
let rec factorize (n:^NUM) (j:^NUM) (flist: ^NUM list) =
if n = ^NUM.One then flist
elif n % j = ^NUM.Zero then factorize (n/j) (^NUM.One + ^NUM.One) (j::flist)
else factorize n (j + ^NUM.One) (flist)
factorize n (^NUM.One + ^NUM.One) []
Run Code Online (Sandbox Code Playgroud) F#是否与C#有相同的问题,你不能直接使用泛型T类型的算术运算符?
你能写一个通用的Sum函数来返回支持算术加法的任何值的总和吗?
到目前为止,我对F#中的类型推断给我留下了深刻的印象,但是我找到了一些它没有真正得到的东西:
//First up a simple Vect3 type
type Vect3 = { x:float; y:float; z:float } with
static member (/) (v1 : Vect3, s : float) = //divide by scalar, note that float
{x=v1.x / s; y= v1.y /s; z = v1.z /s}
static member (-) (v1 : Vect3, v2 : Vect3) = //subtract two Vect3s
{x=v1.x - v2.x; y= v1.y - v2.y; z=v1.z - v2.z}
//... other operators...
//this works fine
let floatDiff h (f: float -> float) x = …Run Code Online (Sandbox Code Playgroud)