将 Variant 转换为正确类型的正确方法是什么?
What is the right way to convert Variant to proper type?
我用mysql-native
那个returnVariant数据类型。我需要将其转换为标准类型,如 int
、string
等
D有std.conv
,但是std.variant
也有具体化的方法
我无法理解 get
、coerce
、toString
和 to
(来自 std.conv
)之间的区别。
而且convertsTo
是returnbool
听起来也很奇怪。根据它的名字,我预计它应该符合惯例。恕我直言 isConvertable
是更合适的名称。
可以通过三种方式从 Variant
类型中获取值:
Variant.peek!T
:如果Variant
对象当前持有的值是T
类型,那么指向该值的指针是return编辑。如果它持有不同类型的值,则它 return 为 null。
Variant v = "42";
string* ptr = v.peek!string;
assert(ptr !is null && *ptr == "42");
Variant.get!T
:如果Variant
对象当前持有的值是T
类型,return它的值。否则,将抛出 VariantException
。
Variant v = "42";
assertThrown!VariantException(v.get!int);
assertNotThrown!VariantException(v.get!string);
Variant.coerce!T
: Returns 当前由 Variant
对象持有的值,显式转换为类型 T
。如果该值无法转换为 T
类型,则会抛出 Exception
。
Variant v = "42";
string s = v.coerce!string;
assert(s == "42");
int i = v.coerce!int;
assert(i == 42);
我用mysql-native
那个returnVariant数据类型。我需要将其转换为标准类型,如 int
、string
等
D有std.conv
,但是std.variant
也有具体化的方法
我无法理解 get
、coerce
、toString
和 to
(来自 std.conv
)之间的区别。
而且convertsTo
是returnbool
听起来也很奇怪。根据它的名字,我预计它应该符合惯例。恕我直言 isConvertable
是更合适的名称。
可以通过三种方式从 Variant
类型中获取值:
Variant.peek!T
:如果Variant
对象当前持有的值是T
类型,那么指向该值的指针是return编辑。如果它持有不同类型的值,则它 return 为 null。Variant v = "42"; string* ptr = v.peek!string; assert(ptr !is null && *ptr == "42");
Variant.get!T
:如果Variant
对象当前持有的值是T
类型,return它的值。否则,将抛出VariantException
。Variant v = "42"; assertThrown!VariantException(v.get!int); assertNotThrown!VariantException(v.get!string);
Variant.coerce!T
: Returns 当前由Variant
对象持有的值,显式转换为类型T
。如果该值无法转换为T
类型,则会抛出Exception
。Variant v = "42"; string s = v.coerce!string; assert(s == "42"); int i = v.coerce!int; assert(i == 42);