使用值类型为std.typecons.Nullable实例化的关联数组

时间:2018-12-04 19:21:22

标签: d

D的新手!我有两个用于将键/值对输入到A​​A中的集合函数。一个只带有密钥(K)的密钥,另一个带有一对(K,V)密钥的密钥。

struct SMap(K,V) {
    private Nullable!(V)[K] stuff; 

void set(K k){                    //Issue is with this one
    if(k in stuff) 
        stuff[k].nullify;
}

void set(K k, V v){
    if(k !in stuff)
        stuff[k] = v;

如果我否定该语句,则会遇到Range错误。我知道在调用nullify时,我会抹去与“ k”配对的值,并且我相信它将isNull设置为true(如果我正确阅读了文档) 如何将'k'插入具有可为空值的键?

SMap!(int,string) sm;
sm.set(2);

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

RangeError对于if(k !in stuff) stuff[k].nullify;很有意义。您是在说:“如果k中没有元素stuff,请对其进行处理。”如果不存在,则无法对其进行任何操作。结束。

更明确地说,您的代码是这样的:

if (k !in stuff) { auto tmp = stuff[k]; // This line throws RangeError, since there is no element k in stuff. tmp.nullify(); stuff[k] = tmp; }

当然,这不是您想要的,您想将其设置为null。我可以建议一下吗?

void set(K k){ stuff[k] = Nullable!V.init; }

答案 1 :(得分:0)

我最后想出的唯一可行的答案是:

try-except