私は現在、Rubyの関数の1つに対してこれを行っています:
if @to_pass.kind_of?(Array)
@to_pass.map do {|item| do_a_function(item)}
else
do_a_function(item)
end
「これが配列の場合は、関数をマップして適用し、そうでない場合は関数を実行する」というより短い方法はありますか?
私は現在、Rubyの関数の1つに対してこれを行っています:
if @to_pass.kind_of?(Array)
@to_pass.map do {|item| do_a_function(item)}
else
do_a_function(item)
end
「これが配列の場合は、関数をマップして適用し、そうでない場合は関数を実行する」というより短い方法はありますか?
メソッドを使用するArray
だけで、単一のアイテムを含む配列を作成するか、元の配列を返すだけです。
Array(@to_pass).map { |item| do_a_function(item) }
単一のオブジェクトを配列に変換するだけです。出力を使用していない場合は、新しい配列が作成されないため、それぞれがマップよりも優れています。
# 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) }
次のように、常に配列に変換してフラット化を利用できます。
([@to_pass].flatten).map { |item| do_a_function(item) }
これflatten
は、すでにフラット化された配列をそのまま保持するため機能します。