[英]Ruby: How do I get the methods of a class without having an object of it?
[英]get methods of an object in 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,这就是你所看到的。
似乎除了ruby 1.9.1之外没有Object#方法的文档。 好像它不再存在。 (看看http://www.ruby-doc.org/core-1.9.3/Object.html )
我想这是为了澄清一个人应该使用.singleton_methods或.instance_methods之一来确定方法的存在位置。
无论如何,未记录的方法可以做任何它喜欢的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.