对于
Ruby(1.9)解释器的这个行为,我有些困惑
class Foo def pub private_thing end private def private_thing puts "private touch" end end x = Foo.new x.pub private touch => nil
到现在为止还挺好.
x.private_thing NoMethodError: private method `private_thing' called for #<Foo:0xb76abd34> from (irb):25 from :0
还好吧这就是我的预期
但为什么这是空的?
x.methods(false) => []
而这给我的是我期待的?
Foo.instance_methods(false) => ["pub"]
解决方法
的确,“方法”的方法似乎已经消失了.你应该使用
public_instance_methods.
为了解释为什么x.methods(false)的行为是这样的,回头看一下ruby 1.9.1 docs http://www.ruby-doc.org/core-1.9.1/Object.html#method-i-methods.如果你看到源代码,如果你传入一个参数,它的行为是singleton_methods,这是你正在寻找的.