[ruby-list:50596] Re: [質問] yield の使い方
From:
<yamataka@...08.itscom.net>
Date:
2017-10-06 10:08:48 UTC
List:
ruby-list #50596
> なかだです。
山口です。
なかださん、ご教示ありがとうございます。
>> dlna_play_list = [
>> {:ch => '2',
>> :bit => '16',
>> :fs => '32000'},
> 値は文字列ではなく数値で持っておいたほうがいいのではないでしょうか。
そうですね。
他で出力されたデータを、そのまま利用しているので、文字列になっています。
> def mk_play_list(*types)
> types &= [:fs,:bit,:ch]
> @play_list.select { |content| yield(*content.values_at(*types))}
fs,bit,ch 文字列なので、数値変換を入れたのと、実際には他の要素も入るので
下記の様にしました。
@play_list.select do |content|
x = []
types.each do |type|
case type
when :fs,:bit,:ch
x.push(content[type].to_i)
when :album,:title
# do something
else # do nothing
end
end
yield(*x)
end
> end
> pp obj.mk_play_list(:fs, :bit, :ch) { |fs,bit,ch|
> (fs > 32000 && fs < 96000) && (bit >= 16) }
>
>でどうでしょうか。
ばっちりでした!
可変引数にし、& で 積集合の部分や、他の要素についてもyieldで処理付け加え
たりして、
理解がすごく深まりました。
Rubyがますます、好きになりました。:-)