加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

获取Ruby对象的方法

发布时间:2020-12-16 19:41:05 所属栏目:百科 来源:网络整理
导读:对于 Ruby(1.9)解释器的这个行为,我有些困惑 class Foo def pub private_thing end private def private_thing puts "private touch" end endx = Foo.newx.pubprivate touch= nil 到现在为止还挺好. x.private_thingNoMethodError: private method `private_
对于 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,这是你正在寻找的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读