0

私はこのコードを持っています:

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"ますか?

4

5 に答える 5

2

スプラット配列のアンパック:

foo ["Thanks", *my_array]
于 2012-08-12T08:23:06.980 に答える
0

単純!メソッド定義にスプラット演算子 ( *) を追加するだけです。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
于 2012-08-12T10:05:06.757 に答える
0

既存の配列に要素を追加するための迅速かつクリーンな方法を探している場合は、次を使用できます。

foo ["Thanks"] + my_array

を含む 1 要素の配列を作成し、"Thanks"その内容を連結しmy_arrayます。必要に応じて、IRB で確認できます。

my_array = ["Hello", "Bye", "Please"]
=> ["Hello", "Bye", "Please"]
["Thanks"] + my_array
=> ["Thanks", "Hello", "Bye", "Please"]
于 2012-08-11T22:51:24.450 に答える
0

メソッドの変更を受け入れる場合、このメソッドは配列または単一のオブジェクトに対して機能します。

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']
于 2012-08-12T08:57:16.353 に答える
0

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
于 2012-08-11T22:58:18.233 に答える