From: yamataka@...08.itscom.net Date: 2017-10-05T19:56:25+09:00 Subject: [ruby-list:50594] [質問] yield の使い方 山口と申します。 yield 簡単な使い方が理解できて、便利だと感じ始めたのですが、 以下、コード require 'pp' dlna_play_list = [ {:ch => '2', :bit => '16', :fs => '32000'}, {:ch => '2', :bit => '16', :fs => '44100'}, {:ch => '2', :bit => '16', :fs => '88200'}, {:ch => '2', :bit => '16', :fs => '96000'}, {:ch => '6', :bit => '16', :fs => '32000'}, {:ch => '6', :bit => '16', :fs => '44100'}, {:ch => '6', :bit => '16', :fs => '88200'}, {:ch => '6', :bit => '16', :fs => '96000'}, ] class DlnaPlayList def initialize(play_list) @play_list = play_list end def mk_play_list(type) case type when :fs,:bit,:ch @play_list = @play_list.select { |content| yield(content[type].to_ i) } end end end obj = DlnaPlayList.new(dlna_play_list) # fs,bit,ch 個別での抽出は可能 pp obj.mk_play_list(:fs) { |fs| fs > 32000 && fs < 96000 } pp obj.mk_play_list(:bit) { |bit| bit >= 16 } pp obj.mk_play_list(:ch) { |ch| ch >= 6 } のように、fs,bit,chで指定の条件で抽出は可能なのですが... fs,bit,ch の条件を自由に組合わせたブロックを渡して、 { |fs,bit,ch| (fs > 32000 && fs < 96000) && (bit >= 16) # 要素条件を全て指定しなくてもよいようにしたい } 該当するデータを抽出したいのですが、記述方法が思いたあたらず、 ご教示いただければと思います。