From: Shinya Kawaji Date: 2006-01-13T22:28:33+09:00 Subject: [ruby-dev:28219] Re: ANDCALL operator (Re: [ruby-list:41768] Re:nilの扱い) かわじ、です。 私も一案ですが。 > nobuyoshi nakada wrote: > >> if h[:a] && h[:a][:b] > >> と書かないといけないのが面倒です。 > > 要するに (tmp = h[:a] and tmp[:b]) を一時変数を使わずに書きたい > > ということだろうと思いますが、 > > ちょっとした案ですが、nil?をブロック付きで呼べるようにするというのは > どうでしょう? Array/Hash の場合に限って言えば、私はそれらのクラスに「深い階層用の 検索メソッド」があるほうが便利のように思います。 たとえば、Array#rec_index とすれば、h[:a] && h[:a][:b] は h.rec_index(:a, :b) と書けるとか。 組み込みじゃなくても、標準添付ライブラリで require 'array' とかすると 使えるとか、そうなってくれると嬉しいのですが。 class Array def rec_index(*keys) if val = at(keys.shift) keys.empty? ? val : val.rec_index(*keys) else nil end end end class Hash def rec_index(*keys) if val = fetch(keys.shift, nil) keys.empty? ? val : val.rec_index(*keys) else nil end end end