歧视与文字结合

dag*_*dag 2 f# types literals

对于一个位类型,F#中的正确语法是什么,只有两个可能的值:0和1.我试过了;

type bit = 
         | 0
         | 1
Run Code Online (Sandbox Code Playgroud)

并且错误消息是error FS0010: Unexpected integer literal in union case.我需要使用 [<Literal>]吗?

我收到了一条不同的错误消息: error FS0010: Unexpected integer literal in union case. Expected identifier, '(', '(*)' or other token.

pad*_*pad 6

如果您正在寻找类型安全的表示形式Bit,您可能更喜欢使用DUs来进行详尽的模式匹配:

type Bit = Zero | One
with member x.Value =
     match x with
     | Zero -> 0
     | One -> 1
Run Code Online (Sandbox Code Playgroud)

如果您想要一个紧凑的表示,boolean键入是一个很好的候选人:

let [<Literal>] Zero = false
let [<Literal>] One = true

let check = function
    | Zero -> "It's Zero"
    | One -> "It's One"
Run Code Online (Sandbox Code Playgroud)

当有一个Bits 的集合时,你可以调查BitArray以获得更有效的治疗.他们的确boolean用作内部表征.