Передача массива произвольной длины в качестве параметров другому методу в Ruby - PullRequest
1 голос
/ 23 января 2011

У меня есть несколько методов, которые отправляют массив переменной длины другому методу, который затем вызывает XML :: RPC-вызов к API.

Теперь, как мне передать их в XML :: RPC, когда они имеют неопределенную длину?

def call_rpc(api_call, array_of_values)
  client.call(
    remote_call, 
    username, 
    password, 
    value_in_array_of_values_1,
    ...,
    value_in_array_of_values_n
  )
end

Я почесал голову за это, и я не могу понять это. Можно ли сделать это хорошим способом? Может быть, я что-то упустил?

Ответы [ 3 ]

2 голосов
/ 23 января 2011

Говорит на вашем языке:

def call_rpc(api_call, array_of_values)
  client.call(
    remote_call, 
    username, 
    password, 
    *array_of_values
  )
end
1 голос
/ 23 января 2011

Оператор Ruby splat / collect * может вам помочь. Он работает путем преобразования массивов в выражения, разделенные запятыми, и наоборот.

Сбор параметров в массив

*collected = 1, 3, 5, 7
puts collected
# => [1,3,5,7]

def collect_example(a_param, another_param, *all_others)
  puts all_others
end

collect_example("a","b","c","d","e")
# => ["c","d","e"]

Разделение массива на параметры

an_array = [2,4,6,8]
first, second, third, fourth = *an_array
puts second # => 4

def splat_example(a, b, c)
  puts "#{a} is a #{b} #{c}"
end

param_array = ["Mango","sweet","fruit"]
splat_example(*param_array)
# => Mango is a sweet fruit
0 голосов
/ 23 января 2011
def f (a=nil, b=nil, c=nil)
    [a,b,c]
end

f(*[1,2]) # => [1, 2, nil]
...