有没有办法在 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
和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;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句