enumrableモジュールのメソッド内でもyieldを使う事ができたのですね……
以前の記事の時点では気付いていませんでした。
class NewAry < Array def foo map {|e| yield(e)}.join("\n") end end #=> nil > a = NewAry.new(16){|e| "0x%04x" % [e ** 2]} #=> ["0x0000", "0x0001", "0x0004", "0x0009", "0x0010", "0x0019", "0x0024", "0x0031", "0x0040", "0x0051", "0x0064", "0x0079", "0x0090", "0x00a9", "0x00c4", "0x00e1"] > a.foo {|e| pp e } "0x0000" "0x0001" "0x0004" (中略) "0x00c4" "0x00e1" #=> "0x0000\n0x0001\n0x0004\n0x0009\n0x0010\n0x0019\n0x0024\n0x0031\n0x0040\n0x0051\n0x0064\n0x0079\n0x0090\n0x00a9\n0x00c4\n0x00e1"
他のEnumrableモジュールと同様、ぶん回すときに細工をする事が可能です。
> a.foo {|e| pp "%10s => %4s" % [e, e.to_i(16)] } " 0x0000 => 0" " 0x0001 => 1" " 0x0004 => 4" (中略) " 0x00c4 => 196" " 0x00e1 => 225" #=> " 0x0000 => 0\n 0x0001 => 1\n 0x0004 => 4\n 0x0009 => 9\n 0x0010 => 16\n 0x0019 => 25\n 0x0024 => 36\n 0x0031 => 49\n 0x0040 => 64\n 0x0051 => 81\n 0x0064 => 100\n 0x0079 => 121\n 0x0090 => 144\n 0x00a9 => 169\n 0x00c4 => 196\n 0x00e1 => 225"
ちゃんと定義してあげれば、「&:」を持たせる事も出来るはずです。
次回以降、気が向いたら挑戦します
参考もと
Rubyベストプラクティス -プロフェッショナルによるコードとテクニック
- 作者: Gregory Brown,高橋征義,笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/03/26
- メディア: 大型本
- 購入: 9人 クリック: 307回
- この商品を含むブログ (48件) を見る