Учитывая следующий класс:
class Foo
def a
dup.tap { |foo| foo.bar }
end
def b
dup.tap(&:bar)
end
protected
def bar
puts 'bar'
end
end
Кажется, что оба Foo#a
и Foo#b
должны быть эквивалентными, но это не так:
> Foo.new.a
bar
=> #<Foo:0x007fe64a951ab8>
> Foo.new.b
NoMethodError: protected method `bar' called for #<Foo:0x007fe64a940a88>
Есть ли причина для этого? Это ошибка?
Протестировано на Ruby 2.2.3p173