連想配列

D言語の連想配列について
0
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
SHOO @mono_shoo

@9rnsr そうです。getはいわゆるconstメンバ関数のように振る舞うべきです。

2012-06-17 03:36:02
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
SHOO @mono_shoo

lazyなんて仕様があったなぁ… #d_lang

2012-06-17 03:47:09
hara kenji @9rnsr

あるいはAAへの値の代入は常にswapになってopAssignは常に動かない、と仕様で明示する? 代入オーバーロードを使用不可能にするのは、まあ、受け入れられる?

2012-06-17 03:47:57
hara kenji @9rnsr

@mono_shoo 一応AA.getが取るdefaultValueは現状lazyで受け付けられてます。

2012-06-17 03:49:09
hara kenji @9rnsr

AAへの値設定の評価順の件、ローカルで意外と簡単に直せた。TestSuite通した後でレポートしてPullReq投げる

2012-06-17 04:16:55
SHOO @mono_shoo

うーん、もうちょっと複雑か。

2012-06-17 04:49:22
SHOO @mono_shoo

getのdefaultValueの初期値を含めるとこうか。 http://t.co/mPPoiWIs #d_lang

2012-06-17 04:54:39
SHOO @mono_shoo

https://t.co/UTMZdRLH とりあえずbranch切ったけど… Enhancementだからなぁ。

2012-06-17 05:13:43