假设我有两种方法的ABC类.
class ABC
def test
"test"
end
def display_test
puts test
end
end
Run Code Online (Sandbox Code Playgroud)
我只希望能够ABC.new.display_test从我的控制台(IRB)打电话(给我'测试')并且无法打电话ABC.new.test或者ABC.new.send(:test)那件事.这可能吗?如果是这样,怎么样?
最彻底的方法是使用testprivate 并覆盖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
Run Code Online (Sandbox Code Playgroud)
请注意,这个send覆盖不合适,因为它只接受一个参数.
如果以正确的方式完成,就可以做到这样的事情:
ABC.new.send(:send, :test)
Run Code Online (Sandbox Code Playgroud)