我想访问程序中顶层主对象中定义的变量和方法

@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
#=>

09-13 12:30