枚举构造函数(创建成员)

时间:2015-08-01 20:48:08

标签: constructor enums field d member

在D中,我试图创建一个成员有成员的枚举。我可以更好地解释我试图用一个例子做什么,其中si代表我试图创建的子成员:

在Python中,我可以这样做:

class Foo(enum.Enum):
    A = "A string", 0
    B = "B string", 1
    C = "C string", 2

    def __init__(self, s, i):
        self.s = s
        self.i = i

print(Foo.A.s)

Java可以这样做:

public enum Foo {
    A("A string", 0),
    B("B string", 1),
    C("C string", 2);

    private final String s;
    private final int i;

    Foo(String s, int i) {
        this.s = s;
        this.i =i;
    }
}

我如何在D中执行此操作?我在官方教程中看不到任何内容。如果由于某种原因我无法在D中做到这一点,那么什么是一个很好的选择呢?

1 个答案:

答案 0 :(得分:6)

你可以构建一个任何类型的枚举,这里我们使用一个带有一个别名的元组(很像python),以便更容易输入。

import std.stdio;
import std.typecons;

alias FooT = Tuple!(string, "s", int, "i");
enum Foo : FooT {
    A = FooT("A string", 0),
    B = FooT("B string", 1),
    C = FooT("C string", 2),
}


void main(string[] args) {
    writeln(Foo.A.s);
}