Можно ли задать несколько аргументов по умолчанию для метода, возвращающего несколько значений?

#ruby

Вопрос:

У меня есть метод, который в основном таков:

 def myMethod(a, b)
  # do stuff
end
 

Обычно, если я вызываю метод, который возвращает несколько значений, я бы просто сделал:

 a, b = otherMethod
 

Как можно было бы применить это к аргументам myMethod по умолчанию, НЕ используя массив ? Я могу ошибаться в вопросах производительности, но причина просто в том, что я хочу избежать создания новых объектов массива, так как этот метод вызывается очень часто. Я знаю, что мог бы также написать:

 a, b = otherMethod
myMethod(a, b)
 

Однако у меня вообще не было бы аргумента по умолчанию, и код стал бы больше, так как он вызывается из нескольких строк. Я хотел бы знать, есть ли способ сделать это с таким синтаксисом в аргументах.

Комментарии:

1. Когда вы возвращаете несколько значений , например a, b = foo , разве вы уже не возвращаете массив из foo ? Это похоже на проблему xy -если вы можете предоставить больше контекста, вероятно, есть лучшее решение, поскольку возврат нескольких значений, как правило, является антипаттером. Вероятно, вам нужна структура, которую можно передавать, или какая-либо другая структура/класс данных, имеющая несколько функций-членов, которые могут манипулировать своими данными с течением времени, без выделения и без подробного синтаксиса распаковки/переупаковки.

2. Ты имеешь в виду myMethod(*otherMethod) ?

3. Я не имею дело со сложными значениями, только с 2 числовыми значениями, используя return a, b. Если вы говорите, что независимо от того, назначаю ли я равное или нет количество переменных возвращаемым значениям, каждый раз все равно создается новый массив, синтаксис, который я ищу, будет неуместен. Я думал, что выполнение a, b = foo, если foo возвращает 2 значения, позволит избежать этого.

4. Методы всегда возвращают ровно один объект. Если вы пишете a, b = m , метод m возвращает массив и переменные a и b присваивает значения из массива с помощью применения декомпозиции массива .