То, что происходит с возвращаемым значением, явно выходит за рамки метода.Вы не должны пытаться обнаружить, что там происходит.
Очевидное решение состоит в том, чтобы решить это на стороне вызывающего, например, с помощью:
def foo
[:bar, :baz]
end
x, = foo
# or more specific
x, _ = foo
Вы также можете передать значения в блоки просто задайте интересующие вас аргументы блока:
def foo
yield :bar, :baz
end
foo do |x|
p x: x
# prints {:x=>:bar}
end
foo do |x, y|
p x: x, y: y
# prints {:x=>:bar, :y=>:baz}
end
Если условие важно, вы можете проверить arity
:
def foo(&block)
if block.arity == 2
yield :bar, :baz
else
yield :bar
end
end