F#中的"bigint"究竟是什么?

roy*_*yco 9 f#

我知道这bigint不是一个函数,而是一个类型构造函数.这就是失败的原因:

// Won't compile
let foo = 10 |> bigint
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建一个接受整数并返回a的新函数bigint,然后管道运算符将起作用.

但是,我不明白为什么会这样:

let bar = bigint 10
Run Code Online (Sandbox Code Playgroud)

如果bigint是类型构造函数,为什么我不需要new?究竟是哪里被bigint定义为System.Numerics.BigInteger的构造函数的别名?

des*_*sco 8

bigint是System.Numerics.BigInteger的类型abberviation,因此当您键入时

let x = bigint 10
Run Code Online (Sandbox Code Playgroud)

你实际上创建了BigInteger的实例.在F#中,new在构造函数中是可选的,基本上它应该在创建实现IDisposable的类型的实例时使用

  • 我不知道是否有原因,而所有其他数字类型如"int16"都是"类型缩写"和"函数","bigint"只是一个"类型appreviaton".我可能推测这是因为首先存在像"int16"这样的函数的唯一原因是提供一种方法来公开没有"库"调用的原始IL整数转换(例如`conv.i2`)并且通常暴露通过其他语言的"演员"功能给其他语言的用户. (2认同)