获取ruby中对象的方法



我对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"]

确实,"methods"方法似乎已经消失了。您应该使用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,就是你所看到的

似乎除了ruby 1.9.1之外没有关于object#方法的文档。好像它已经不存在了。(看一看http://www.ruby-doc.org/core-1.9.3/Object.html)

我想这是为了澄清应该使用。singleton_methods或。instance_methods之一来确定方法的位置。

在任何情况下,没有文档记录的方法都可以做任何它喜欢做的事情。

相关内容

  • 没有找到相关文章

最新更新