假设我有两种方法的ABC类。
class ABC
def test
"test"
end
def display_test
puts test
end
end
我只希望能够ABC.new.display_test
从控制台(IRB)打电话(使我返回“测试”),而不能打电话ABC.new.test
或ABC.new.send(:test)
就此打电话。这可能吗?如果是这样,怎么办?
最彻底的方法是拥有test
private并重写该send
方法,以专门阻止对以下对象的调用test
:
class ABC
def test
"test"
end
private :test
def display_test
puts test
end
def send(id)
if id == :test
raise NoMethodError.new("error")
else
super(id)
end
end
alias_method :__send__, :send
end
请注意,此send
覆盖不正确,因为它仅接受一个参数。
如果以正确的方式进行操作,则可以执行以下操作:
ABC.new.send(:send, :test)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句