2

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

type bit = 
         | 0
         | 1

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

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

4

2 回答 2

6

如果您正在寻找 的类型安全表示Bit,您可能更喜欢 DU 而不是枚举以进行详尽的模式匹配:

type Bit = Zero | One
with member x.Value =
     match x with
     | Zero -> 0
     | One -> 1

如果你想有一个紧凑的表示,booleantype 是一个很好的选择:

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

let check = function
    | Zero -> "It's Zero"
    | One -> "It's One"

当有Bits 的集合时,您可以查看BitArray以获得更有效的处理。它们确实boolean用作内部表示。

于 2012-11-03T07:21:06.907 回答
4

你想使用一个枚举 -

type bit = 
     | Zero= 0
     | One = 1

尽管模式匹配不如可区分联合好。

或者,您可以将 DU 与

type bit =
|Zero
|One
member x.Int() =
    match x with
    |Zero -> 0
    |One -> 1
于 2012-11-03T02:13:18.367 回答