私はこのコードを持っています:
def foo( arg_array )
arg_array.each do |ar|
puts ar
end
end
my_array = ["Hello", "Bye", "Please"]
foo my_array # Works fine
foo "Thanks", my_array # And this not
直接参加せずに2番目のようなメソッド呼び出しを行う方法はあり"Thanks"
ますか?
スプラット配列のアンパック:
foo ["Thanks", *my_array]
単純!メソッド定義にスプラット演算子 ( *
) を追加するだけです。arg_array
def foo( *arg_array )
arg_array.each do |ar|
puts ar
end
end
my_array = ["Hello", "Bye", "Please"]
foo my_array # Works fine
foo "Thanks", my_array # And this also
既存の配列に要素を追加するための迅速かつクリーンな方法を探している場合は、次を使用できます。
foo ["Thanks"] + my_array
を含む 1 要素の配列を作成し、"Thanks"
その内容を連結しmy_array
ます。必要に応じて、IRB で確認できます。
my_array = ["Hello", "Bye", "Please"]
=> ["Hello", "Bye", "Please"]
["Thanks"] + my_array
=> ["Thanks", "Hello", "Bye", "Please"]
メソッドの変更を受け入れる場合、このメソッドは配列または単一のオブジェクトに対して機能します。
def foo(*args)
args.each do |ar|
puts ar
end
end
* argsは単一のオブジェクトを配列に変換します
foo 'thanks'
# => prints 'thanks'
foo ['bar', 'baz', 'foobar']
# => prints 'bar'
# => prints 'baz'
# => prints 'foobar'
メソッドを変更したくない場合は、呼び出しごとに配列に感謝を追加できます
foo ['Thanks'] + ['to','you']
String
任意の数のorを受け入れて単一の配列として扱いたい場合は、次のArray
ように使用できます。
def foo(*arg_array)
arg_array = arg_array.map { |arg| arg.is_a?(Array) ? arg : [arg] }.flatten(1)
arg_array.each do |ar|
puts ar
end
end
my_array = ["Hello", "Bye", "Please"]
foo my_array # print Hello Bye Please
foo "Thanks", my_array # prints Thanks Hello Bye Please