我可以在.NET上创建自己的文字类型(F#)

时间:2011-05-16 09:16:10

标签: f# types literals

例如,如果我想要Nullable(x)的文字类型,如

let x = 6x // nullable literal type 

创建自己的文字类型是真的吗?

1 个答案:

答案 0 :(得分:11)

是的,你可以

F#spec:

带有后缀Q,R,Z,I,N,G的整数文字通过以下语法翻译用于用户定义和库定义的类型: 的 XXXX<后缀GT;

  • 对于xxxx = 0 - NumericLiteral.FromZero()
  • 对于xxxx = 1 - NumericLiteral.FromOne()
  • 对于Int32范围内的xxxx - NumericLiteral.FromInt32(xxxx)
  • 对于Int64范围内的xxxx - NumericLiteral.FromInt64(xxxx)
  • 其他数字 - NumericLiteral.FromString(“xxxx”)

例如,如下定义模块NumericLiteralZ允许使用文字形式32Z来生成32个“Z”字符的序列。没有文字语法可用于32位整数范围之外的数字。

module NumericLiteralZ =
    let FromZero() = ""
    let FromOne() = "Z"
    let FromInt32 n = String.replicate n "Z"

// nullables
open System
module NumericLiteralN = 
    let FromZero()          = Nullable(0)
    let FromOne()           = Nullable(1)
    let FromInt32(i : int)  = Nullable(i)

printfn "%A" 0N
printfn "%A" 1N
printfn "%A" 100N.HasValue