我对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
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
x.private_thing
NoMethodError: private method `private_thing' called for #<Foo:0xb76abd34>
from (irb):25
from :0
Run Code Online (Sandbox Code Playgroud)
还好.这就是我的预期
但为什么这个空?
x.methods(false)
=> []
Run Code Online (Sandbox Code Playgroud)
虽然这给了我期待的东西?
Foo.instance_methods(false)
=> ["pub"]
Run Code Online (Sandbox Code Playgroud)
实际上,"方法"方法似乎已经消失了.您应该使用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,这就是你所看到的.
归档时间: |
|
查看次数: |
17813 次 |
最近记录: |