Vala,要枚举的字符串
Vala, string to enum
有没有办法在 vala 中将字符串转换为枚举:
string foo = "Enum1";
MY_ENUM theEnum = MY_ENUM.get_value_by_name(foo);
enum MY_ENUM {
Enum1,
Enum2,
Enum3
}
因此在此示例中,“theEnum”的值为:MY_ENUM.Enum1
可以使用 GLib 的 GObject 库提供的运行时类型系统。有EnumClass
and EnumValue
个。这些在运行时提供自省并允许从字符串初始化枚举。
目前语法有点复杂,虽然有人可以修改 Vala 编译器使其更容易,但这是一项重要的工作。
一个例子:
void main () {
try {
MyEnum? the_enum_value;
the_enum_value = MyEnum.parse ("FIRST");
print (@"$(the_enum_value)\n");
} catch (EnumError error) {
print (@"$(error.message)\n");
}
}
errordomain EnumError {
UNKNOWN_VALUE
}
enum MyEnum {
FIRST,
SECOND,
THIRD;
public static MyEnum parse (string value) throws EnumError {
EnumValue? a;
a = ((EnumClass)typeof (MyEnum).class_ref ()).get_value_by_name ("MY_ENUM_" + value);
if (a == null) {
throw new EnumError.UNKNOWN_VALUE (@"String $(value) is not a valid value for $(typeof(MyEnum).name())");
}
return (MyEnum)a.value;
}
}
有没有办法在 vala 中将字符串转换为枚举:
string foo = "Enum1";
MY_ENUM theEnum = MY_ENUM.get_value_by_name(foo);
enum MY_ENUM {
Enum1,
Enum2,
Enum3
}
因此在此示例中,“theEnum”的值为:MY_ENUM.Enum1
可以使用 GLib 的 GObject 库提供的运行时类型系统。有EnumClass
and EnumValue
个。这些在运行时提供自省并允许从字符串初始化枚举。
目前语法有点复杂,虽然有人可以修改 Vala 编译器使其更容易,但这是一项重要的工作。
一个例子:
void main () {
try {
MyEnum? the_enum_value;
the_enum_value = MyEnum.parse ("FIRST");
print (@"$(the_enum_value)\n");
} catch (EnumError error) {
print (@"$(error.message)\n");
}
}
errordomain EnumError {
UNKNOWN_VALUE
}
enum MyEnum {
FIRST,
SECOND,
THIRD;
public static MyEnum parse (string value) throws EnumError {
EnumValue? a;
a = ((EnumClass)typeof (MyEnum).class_ref ()).get_value_by_name ("MY_ENUM_" + value);
if (a == null) {
throw new EnumError.UNKNOWN_VALUE (@"String $(value) is not a valid value for $(typeof(MyEnum).name())");
}
return (MyEnum)a.value;
}
}