[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がますます、好きになりました。:-)



In This Thread

Prev Next