#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
присваивает значения из массива с помощью применения декомпозиции массива .