我想访问程序中顶层主对象中定义的变量和方法
@x = :hello
def instanceMethodMain
p "instanceMethodMain"
end
class Baz
def method
p eval("@x", TOPLEVEL_BINDING)
p eval("instanceMethodMain", TOPLEVEL_BINDING)
end
end
Baz.new.method
输出是
:hello
"instanceMethodMain"
"instanceMethodMain"
即使我使用
mainRef=TOPLEVEL_BINDING.eval('self')
p mainRef.send :instanceMethodMain
有人能解释一下为什么instancemethodmain被调用了两次吗?
最佳答案
instanceMethodMain
不会被调用两次。
你可以通过添加
def instanceMethodMain
puts "BEEN HERE"
p "instanceMethodMain"
end
p
以"instanceMethodMain"
为参数调用两次。p p "instanceMethodMain"
#=> "instanceMethodMain"
#=> "instanceMethodMain"
注意
p "string"
显示"string"
并返回"string"
,而puts "string"
显示string
并返回nil
:puts puts "instanceMethodMain"
#=> instanceMethodMain
#=>