我用D语言进行实验,发现std.variant很酷。
但是后来我感到困惑。
例如,
import std.stdio;
void main()
{
string x = "";
x ~= 'v';
writeln(x);
}
这可以完成预期的工作。
但是,
import std.stdio;
import std.variant;
void main()
{
Variant x = "";
x ~= 'v';
writeln(x);
}
给出了难以理解的RUNTIME错误。
那是为什么?
这是消息。
std.variant.VariantException@std/variant.d(1675): Variant: attempting to use incompatible types char and immutable(char)[]
----------------
??:? inout @property inout(immutable(char)[]) std.variant.VariantN!(32uL).VariantN.get!(immutable(char)[]).get() [0x106f84654]
??:? long std.variant.VariantN!(32uL).VariantN.handler!(immutable(char)[]).handler(std.variant.VariantN!(32uL).VariantN.OpID, ubyte[32]*, void*) [0x106f7559d]
??:? std.variant.VariantN!(32uL).VariantN std.variant.VariantN!(32uL).VariantN.opOpAssign!("~", char).opOpAssign(char) [0x106f84a1d]
??:? _Dmain [0x106f74d8d]
答案 0 :(得分:3)
这似乎是std.variant.Variant中的错误。这里的问题是char
和immutable(char)
是两种不同的类型,并且Variant
不知道它们是密切相关的。有两种不同的解决方法:让x
持有char[]
而不是immutable(char)[]
(也称为string
),或者使'v'
成为{{ 1}}:
immutable(char)
或
import std.stdio;
import std.variant;
void main()
{
Variant x = "".dup; // Duplicate the string to make it a heap-allocated, mutable string.
x ~= 'v';
writeln(x);
}