概要
EnumerableのMix-Inのサンプル
詳細
EnumerableをMix-Inすることで、様々な繰り返し操作が可能です。
Enumerableモジュールは内部でeachを利用しているため、
eachを実装する必要があります。
サンプル仕様
複数の生徒を持つ先生クラスを想定
サンプルコード
# encoding: Windows-31J require "pp" class Teacher attr_accessor :students include Enumerable def each students.each {|student|yield student} end end teacher = Teacher.new teacher.students = %w{tanaka suzuki sato} # 生徒に田中さんがいるか確認=>true puts teacher.any? {|student|student == "tanaka"} # 生徒に林さんがいるか確認=>false puts teacher.any? {|student|student == "hayashi"} # 生徒をさん付けで収集=>["tanakaさん", "suzukiさん", "satoさん"] pp teacher.collect {|student|"#{student}さん"} # 生徒数を取得=>3 pp teacher.count # 先頭がsはじまる生徒数を取得=>2 pp teacher.count {|student|student.slice(0,1) == "s"} # 生徒をくん付けで3回ずつ呼ぶ=>"#{student}くん," teacher.cycle(3) {|student|print "#{student}くん,"}.to_s + "\n" # 小林を探して発見出来なければメッセージを表示 ifnone = lambda {puts "\n小林がいないよ"} puts teacher.find(ifnone) {|child|child == "kobayashi"} # 1番目の要素を捨てて、以降の要素をリストで返す print teacher.drop(1).to_s + "\n" # 最初の生徒を表示する puts "最初の生徒は#{teacher.first}"
出力
true false ["tanakaさん", "suzukiさん", "satoさん"] 3 2 tanakaくん,suzukiくん,satoくん,tanakaくん,suzukiくん,satoくん,tanakaくん,suzukiくん,satoくん, 小林がいないよ ["suzuki", "sato"] 最初の生徒はtanaka