首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型化常量声明列表

类型化常量声明列表
EN

Stack Overflow用户
提问于 2011-02-18 04:27:53
回答 3查看 8.6K关注 0票数 1

我希望创建一个具有以下属性的“类似枚举”的常量列表:

  1. 每个标识符的值都是顺序的,有一些空白。(我相信iota和空白标识符在这方面有帮助)。
  2. 标识符是模块的私有标识符。
  3. 这些常量只能与同一类型的其他常量进行比较。

枚举基于来自enum fuse_opcode熔断器。以下是我正在努力完成的一些代码(也是非常错误的):

代码语言:javascript
复制
const Opcode (
    _ = iota // skip 0
    lookupOp
    forgetOp
    getattrOp
    setattrOp
    readlinkOp
    symlinkOp // 6
    _ // skip 7
    mknodOp // 8
    // et cetera ad nauseam
)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-18 05:23:49

这是保险丝操作码的去码。它是从操作码创建的。通常,您会编写一个脚本来完成这个任务;我使用了一个文本编辑器。由于常量值与C枚举值匹配,因此使用显式值。

代码语言:javascript
复制
package fuse

type opCode int32

const (
    opLookup      = 1
    opForget      = 2
    opGetattr     = 3
    opSetattr     = 4
    opReadlink    = 5
    opSymlink     = 6
    opMknod       = 8
    opMkdir       = 9
    opUnlink      = 10
    opRmdir       = 11
    opRename      = 12
    opLink        = 13
    opOpen        = 14
    opRead        = 15
    opWrite       = 16
    opStatfs      = 17
    opRelease     = 18
    opFsync       = 20
    opSetxattr    = 21
    opGetxattr    = 22
    opListxattr   = 23
    opRemovexattr = 24
    opFlush       = 25
    opInit        = 26
    opOpendir     = 27
    opReaddir     = 28
    opReleasedir  = 29
    opFsyncdir    = 30
    opGetlk       = 31
    opSetlk       = 32
    opSetlkw      = 33
    opAccess      = 34
    opCreate      = 35
    opInterrupt   = 36
    opBmap        = 37
    opDestroy     = 38
    opIoctl       = 39
    opPoll        = 40
    opNotifyReply = 41
)
票数 0
EN

Stack Overflow用户

发布于 2011-02-18 12:55:04

你想要这样的东西。您仍然可以将这些常量与文字整数进行比较(没有办法阻止这种情况),但任何对其他整数值的比较或赋值都会导致编译器错误。

代码语言:javascript
复制
type opCode int

const (
    lookupOp opCode = iota+1
    forgetOp
    getattrOp
    setattrOp
    readlinkOp
    symlinkOp // 6
    _         // skip 7
    mknodOp   // 8
    // et cetera ad nauseam
)

如果您真的希望防止外部包看到这些都是整数常量,但您仍然希望它具有可比性,您可以考虑这样做,

代码语言:javascript
复制
type OpCode struct {
    code opCode
}

并且只在您的API中公开OpCode。我还建议明确地记录它是可比较的。

票数 22
EN

Stack Overflow用户

发布于 2011-02-18 06:29:30

代码语言:javascript
复制
package fuse

type opCode int32

const (
    opLookup  opCode    = 1
    opForget  opCode    = 2
    opGetattr opCode    = 3
    opSetattr  opCode   = 4
    opReadlink opCode   = 5
    opSymlink  opCode   = 6
    opMknod   opCode    = 8
    opMkdir   opCode    = 9
    opUnlink   opCode   = 10
)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5037610

复制
相关文章

相似问题

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