在ruby中获取对象的方法

在ruby中获取对象的方法,ruby,reflection,Ruby,Reflection,我对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 `pri

我对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
而这正是我所期待的

Foo.instance_methods(false)
=> ["pub"]

除了ruby 1.9.1之外,似乎没有关于对象方法的文档。好像它已经不存在了。(看一看)

我想这是为了澄清应该使用.singleton_方法或.instance_方法之一来确定方法所在的位置

在任何情况下,一个未记录的方法都可以做它喜欢做的任何事情。

事实上,“方法”方法似乎已经消失了。你应该改用

为了解释为什么
x.methods(false)
会这样,请回顾ruby 1.9.1文档。如果您看到源代码,如果您传入一个参数,它的行为就像singleton_方法一样,这就是您正在使用的

Foo.instance_methods(false)
=> ["pub"]