如何混合 iota 和值

huangapple go评论82阅读模式
英文:

How to mix iota and values

问题

在包含 iota 的 Go 枚举中,如何强制某些值,同时自动递增其他值?

例如,在这段源代码中:

const (
    SUCCESS         int = iota
    ERROR_UNKNOWN       = 3
    ERROR_ARGS
    NOFILES             = 50
    ERROR_OPEN_FILE
    ERROR_BADFILENAME
)

ERROR_ARGS 的值是 ERROR_UNKNOWN,而我期望它是 ERROR_UNKNOWN + 1

有没有一种方法可以实现自动递增和“强制”值的混合,而不使用“_”方法,因为对于像这样的大间隔(从 4 到 50,需要插入 46 行“_”)非常麻烦。

在下面的第一个回答之后进行澄清:值必须始终“向前”,即使在强制值之后也要自动递增。

英文:

In a Go enum containing iota, how is it possible to force some values, yet auto-incrementing others?

For example, in this source code,

const (
    SUCCESS         int = iota
    ERROR_UNKNOWN       = 3
    ERROR_ARGS
    NOFILES             = 50
    ERROR_OPEN_FILE
    ERROR_BADFILENAME
)

ERROR_ARGS=ERROR_UNKNOWN, where I expected it to be ERROR_UNKNOWN + 1 .

Is there a way to achieve mixing auto-increment and 'forcing' values, without the _ method, that is cumbersome for big gaps like here (4 to 50, inserting 46 _ lines...)

Clarifying after first answer below: Values must always 'go forwards', auto-incrementing even after a forced value.

答案1

得分: 2

这是翻译好的内容:

无法使用 iota 设置 ERROR_ARGS = ERROR_UNKNOWN + 1,你可以像这样混合自动递增和手动赋值:

const (
	SUCCESS         int = iota
	ERROR_UNKNOWN
	ERROR_ARGS          = ERROR_UNKNOWN + 1
	NOFILES
	ERROR_OPEN_FILE
	ERROR_BADFILENAME
)

对应的值将是:

0
3
4
50
5
6
英文:

It's not possible to set ERROR_ARGS = ERROR_UNKNOWN + 1 by iota, you can mix automatic increment with manual value like this:

const (
	SUCCESS         int = iota
	ERROR_UNKNOWN       = 3
	ERROR_ARGS          = iota
	NOFILES             = 50
	ERROR_OPEN_FILE     = iota
	ERROR_BADFILENAME
)

Values will be:

0
3
2
50
4
5

huangapple
  • 本文由 发表于 2021年12月31日 18:26:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/70541315.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定