枚举构造函数(创建成员的成员)
enum constructors (creating members of members)
在 D 中,我试图创建一个枚举,其成员有成员。我可以用一个例子更好地解释我想要做什么,其中 s
和 i
代表我试图创建的子成员:
在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 中执行此操作,有什么好的选择?
您可以构建任何类型的枚举,这里我们使用元组(很像 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);
}
在 D 中,我试图创建一个枚举,其成员有成员。我可以用一个例子更好地解释我想要做什么,其中 s
和 i
代表我试图创建的子成员:
在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 中执行此操作,有什么好的选择?
您可以构建任何类型的枚举,这里我们使用元组(很像 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);
}