3

I use mysql-native that return Variant data type. I need to convert it to standard types like int, string etc.

D have std.conv, but std.variant also have methods for concretion.

I can't understand what difference between: get, coerce, toString and to (from std.conv).

Also it's sound very strange that convertsTo is return bool. By it's name I expected that it should do convention. IMHO isConvertable is more proper name for it.

4

1 回答 1

4

有三种方法可以从Variant类型中获取值:

  • Variant.peek!T:如果对象当前持有的值Variant是 类型T,则返回指向该值的指针。如果它持有不同类型的值,则返回 null。

    Variant v = "42";
    string* ptr = v.peek!string;
    assert(ptr !is null && *ptr == "42");
    
  • Variant.get!T: 如果对象当前持有的值Variant是 类型T,则返回它的值。否则,VariantException抛出 a。

    Variant v = "42";
    assertThrown!VariantException(v.get!int);
    assertNotThrown!VariantException(v.get!string);
    
  • Variant.coerce!T:返回对象当前持有的值Variant,显式转换为 type T。如果该值无法转换为 type T,则Exception抛出 an 。

    Variant v = "42";
    string s = v.coerce!string;
    assert(s == "42");
    int i = v.coerce!int;
    assert(i == 42);
    
于 2017-02-07T07:40:26.863 回答