Основным следствием является то, что программисты на Ruby не особенно привыкли делать это таким образом. Любой из ваших вариантов будет легче читаться членами сообщества, другими членами вашей команды, будущими сопровождающими и т. Д.
Второстепенное следствие - создание одноразовых лямбда-функций таким образом будет медленнее, чем вызов статических функций. Создание лямбд не очень-то медленное, но все же медленнее, чем их использование. Если бы вы сделали это много, это начало бы складываться. Чтобы дать некоторый контекст, создание пустой лямбды занимает примерно в 10 раз больше времени, чем создание пустого массива . Так что, если вы делали это неоднократно (например, внутри вызова функции, который используется снова и снова), эта разница может сложиться.
Наконец, есть по крайней мере еще один способ сделать это. Я уверен, что некоторые другие тоже существуют ...
a, b = [:f1, :f2].collect { |fn| send(fn, some_function(some_data)) }
В целом, я думаю, ваша первая альтернатива - самый чистый подход:
data = some_function(some_data)
a, b = f1(data), f2(data)
Совершенно ясно, что вы делаете, и также эффективно.