Enumerableモジュール
先日、帰省からの帰りの新幹線で読む用に、以前から気になっていた以下の二冊を購入。
- 作者: Yugui
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/26
- メディア: 大型本
- 購入: 27人 クリック: 644回
- この商品を含むブログ (251件) を見る
[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
- 作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/07
- メディア: 単行本(ソフトカバー)
- 購入: 133人 クリック: 2,270回
- この商品を含むブログ (285件) を見る
あ、「RHGの逆襲」初回しか参加してないや… 公私共にドタバタしてたりOCaml弄くってたら、すっかり…
で、まだ読んでいる途中なのですが、Rubyという言語についてわかりやすく体系的に纏められている一方、「筆者/Rubyistならこう書く」的な実践的な情報も織り込まれていたりして、明らかに「買って得したなぁ」という感想。サンプルコードの変数名とかも凝っているので元ネタ探しも楽しめそう。
読んでいて多々発見があったのですが、その中の一つがEnumerableモジュール。includeしてeachメソッドさえ実装すれば、EnumerableなメソッドをMix-inできるそうな。恥ずかしながら初耳。
ということで練習。
class Tousa include Enumerable def initialize(count, init, diff) @count = count @init = init @diff = diff end def each val = @init @count.times do yield val val += @diff end end end ts = Tousa.new 5, 1, 3 ts.each_with_index {|v, i| p "<<<#{i}:#{v}>>>"} p ts.inject(0) {|sum, v| sum += v}
Enumerableモジュールをincludeしてeachメソッドのみ実装した等差数列クラスを定義。生成したインスタンスでeach_with_indexやinjectメソッドを使ってみるテスト。
実行させてみると…
"<<<0:1>>>" "<<<1:4>>>" "<<<2:7>>>" "<<<3:10>>>" "<<<4:13>>>" 35
なるほどぉ。