是否可以让Forwardable#def_delegator
方法尊重目标方法是私有的?
在下面的代码中,使用 when 时def_delegator
,Foo#hello
即使它是私有的,也会被调用,因为Forwardable#def_delegator
(实际上,def_instance_delegator
) 的实现使用__send__
,它不尊重私有方法。
require "forwardable"
class Foo
def hello
"Hello"
end
private :hello
end
class Bar
extend Forwardable
def_delegator :@foo, :hello
def initialize
@foo = Foo.new
end
def bar
hello
end
end
foo = Foo.new
foo.hello # => NoMethodError: private method `hello' called for #<Foo:0x007f57c3cd1c80>
bar = Bar.new
bar.bar # => "Hello"
我正在使用 Ruby 2.0。