获取Ruby对象的方法

前端之家收集整理的这篇文章主要介绍了获取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"]

解决方法

的确,“方法”的方法似乎已经消失了.你应该使用 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,这是你正在寻找的.

原文链接:https://www.f2er.com/ruby/271673.html

猜你在找的Ruby相关文章