hara kenji
@9rnsr
@mono_shoo そうではなく、keyがない場合はaaに要素を確保し、Value.initで初期化し、「その確保されたメモリの左辺値を返す」ようにするのが自分の案です。
2012-06-17 03:34:06
hara kenji
@9rnsr
@mono_shoo あー間違えた、getはkeyがない場合にメモリをaaに確保しないのか。自分の案だと既存の挙動を変えてしまう
2012-06-17 03:35:21
hara kenji
@9rnsr
@mono_shoo ですね。getの実装きちんと見てなかった… そうすると新たなメソッドが要るのか。aa.at(key[, defaultValue]) = v; とか?
2012-06-17 03:37:50
hara kenji
@9rnsr
そもそもD言語のAAは実は要素の初期化と代入の区別が付けられないんですよね。ValueがopAssignを定義している型とかの場合に問題になる. 例> http://t.co/KOci02Rr
2012-06-17 03:42:21
SHOO
@mono_shoo
@9rnsr そういうのはあってもよさそうですね。なにげに毎回 if (auto pval = key in aa) {*pval = v; } else { aa[key] = v; } とかやるシーンが多かったので、それがあれば改善されそう。
2012-06-17 03:43:04
SHOO
@mono_shoo
@9rnsr そういう例とかいろいろ考えると、 defaultValue は lazy にするべきなのかも? aa.at(key, new Value).foo(); とかの場合。
2012-06-17 03:46:22
hara kenji
@9rnsr
あるいはAAへの値の代入は常にswapになってopAssignは常に動かない、と仕様で明示する? 代入オーバーロードを使用不可能にするのは、まあ、受け入れられる?
2012-06-17 03:47:57