0

私は現在、Rubyの関数の1つに対してこれを行っています:

if @to_pass.kind_of?(Array)
        @to_pass.map do {|item| do_a_function(item)}
    else
        do_a_function(item)
    end

「これが配列の場合は、関数をマップして適用し、そうでない場合は関数を実行する」というより短い方法はありますか?

4

4 に答える 4

3

メソッドを使用するArrayだけで、単一のアイテムを含む配列を作成するか、元の配列を返すだけです。

Array(@to_pass).map { |item| do_a_function(item) }
于 2013-08-28T17:24:08.527 に答える
3

単一のオブジェクトを配列に変換するだけです。出力を使用していない場合は、新しい配列が作成されないため、それぞれがマップよりも優れています。

# if single object doesn't respond to to_a
# as Guilherme Bernal pointed out in comments, flatten(1) should be used rather than flatten
[@to_pass].flatten(1).each {|item| do_a_function(item) }

# if it does
@to_pass.to_a.each {|item| do_a_function(item) }
于 2013-08-28T17:10:04.893 に答える
1

次のように、常に配列に変換してフラット化を利用できます。

([@to_pass].flatten).map { |item| do_a_function(item) }

これflattenは、すでにフラット化された配列をそのまま保持するため機能します。

于 2013-08-28T17:12:49.093 に答える