Передача кортежа, возвращаемого функцией другой функции - PullRequest
0 голосов
/ 14 февраля 2020

Учитывая две функции

def bar()
  return 1,2
end

def foo(a,b)
  puts %{#{a},#{b}}
end

Я хотел бы иметь возможность вызывать foo как с явными параметрами (например, foo(3,4)), так и с параметрами, возвращаемыми bar (например, foo(bar)).

К сожалению, второй вызов вызывает ArgumentError: «неверное число аргументов (задано 1, ожидается 2)».

Объявление foo() для принятия кортежа (def foo(c); a,b = c; puts %{#{a},#{b}}; end ) тоже не работает, потому что тогда первый параметр вызова вызывает ArgumentError.

Я думал об определении foo для получения Ha sh:

def foo(c)
  a,b = c['a'],c['b']
  puts %{#{a},#{b}}
end

, но это делает Использование с явными параметрами довольно неудобно. То же самое с массивом.

Каков Ruby -экологический способ решить эту проблему?

1 Ответ

1 голос
/ 14 февраля 2020

Вам нужно разделить массив из двух элементов, возвращаемый bar: foo(*bar). Это связано с тем, что foo имеет два аргумента, каждый из которых представляет собой элемент массива, возвращаемый bar, а не один аргумент, являющийся этим массивом.

Напомним, что оператор splat преобразует foo(*[1,2]) в foo(1,2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...