atl*_*ine 1 enums const go iota
说我有下一个C程序:
#include <stdio.h>
int main(int args, char* argv[])
{
enum RC {
APPLE=0,
ORANGE,
PEAR,
BANANA=99,
GRAPE
};
printf("%d, %d, %d, %d, %d\n", APPLE, ORANGE, PEAR, BANANA, GRAPE);
}
Run Code Online (Sandbox Code Playgroud)
输出为:
0、1、2、99、100
如果进行中,如何使用a more golang way来处理呢?
实际上,如果我只是想跳过一些值。例如print 0, 1, 2, 5, 6,那么我可以使用next跳过一些值,但是在这里我需要跳过96个值...
package main
import "fmt"
func main() {
const (
APPLE = iota
ORANGE
PEAR
_
_
BANANA
GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
}
Run Code Online (Sandbox Code Playgroud)
并且,我也可以使用next,但是在GRAPE... 之后我仍然有很多const变量。
package main
import "fmt"
func main() {
const (
APPLE = iota
ORANGE
PEAR
BANANA = 99
GRAPE = 100
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
}
Run Code Online (Sandbox Code Playgroud)
那么,有什么more golang way我需要应对的情况吗?
您可以iota使用常量来移动,并将后续的初始化表达式留空:
const (
APPLE = iota
ORANGE
PEAR
BANANA = iota + 96 // 96 is manually calculated to get 99
GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
Run Code Online (Sandbox Code Playgroud)
这将输出(在Go Playground上尝试):
0 1 2 99 100
Run Code Online (Sandbox Code Playgroud)
尽管如果在之前插入元素BANANA,则BANANA和以后的常量的值都会改变。
如果要避免这种情况,请打破常数组,然后开始一个新的组(只要保留字出现在源中,值iota就会重置为):0const
const (
APPLE = iota
ORANGE
PEAR
)
const (
BANANA = iota + 99 // iota is reset to 0
GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
Run Code Online (Sandbox Code Playgroud)
输出是相同的。在Go Playground上尝试一下。
如果您不想破坏常数组,那么仍然有解决方案。
在您要“打断”编号的位置引入一个常量,并从下一行中减去其值iota。这将产生1,因此将其移去要减去的量减去1。这样,即使您在元素之前BANANA(但不要在_BREAK和之间插入元素BANANA),of BANANA和后续常量的序数也不会改变。
const (
APPLE = iota
ORANGE
PEAR
_BREAK
BANANA = iota - _BREAK + 98 // Continues from 98 + 1 = 99
GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
Run Code Online (Sandbox Code Playgroud)
再次输出是相同的。在Go Playground上尝试一下。
根据您的喜好,_BREAK可以使用进行初始化iota + 1,因此要应用于下一个常量的偏移量将是它获得的值:
const (
APPLE = iota
ORANGE
PEAR
_BREAK = iota + 1
BANANA = iota - _BREAK + 99 // Continues from 99
GRAPE
)
Run Code Online (Sandbox Code Playgroud)
在Go Playground上尝试一下。使用对您而言更简单的方法。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |