对于位类型,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.
答案 0 :(得分:6)
如果您正在寻找Bit
的类型安全表示形式,您可能更喜欢将DUs用于枚举模式匹配的枚举:
type Bit = Zero | One
with member x.Value =
match x with
| Zero -> 0
| One -> 1
如果您想要一个简洁的表示法,boolean
类型是一个很好的候选人:
let [<Literal>] Zero = false
let [<Literal>] One = true
let check = function
| Zero -> "It's Zero"
| One -> "It's One"
当有Bit
个集合时,您可以查看BitArray以获得更有效的治疗。他们确实使用boolean
作为内部表示。
答案 1 :(得分:4)
您想使用枚举 -
type bit =
| Zero= 0
| One = 1
虽然模式匹配不如受歧视的联盟好。
或者你也可以使用DU和
type bit =
|Zero
|One
member x.Int() =
match x with
|Zero -> 0
|One -> 1