首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与字面量的判别联合

与字面量的判别联合
EN

Stack Overflow用户
提问于 2012-11-03 09:41:03
回答 2查看 640关注 0票数 2

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

代码语言:javascript
复制
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.

EN

回答 2

Stack Overflow用户

发布于 2012-11-03 15:21:07

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

代码语言:javascript
复制
type Bit = Zero | One
with member x.Value =
     match x with
     | Zero -> 0
     | One -> 1

如果你想要一个紧凑的表示,boolean类型是一个很好的选择:

代码语言:javascript
复制
let [<Literal>] Zero = false
let [<Literal>] One = true

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

当有一个Bit集合时,您可以查看BitArray以获得更有效的处理。他们确实使用boolean作为内部表示。

票数 6
EN

Stack Overflow用户

发布于 2012-11-03 10:13:18

你想使用枚举-

代码语言:javascript
复制
type bit = 
     | Zero= 0
     | One = 1

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

或者,您也可以将DU与

代码语言:javascript
复制
type bit =
|Zero
|One
member x.Int() =
    match x with
    |Zero -> 0
    |One -> 1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13205177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档