为什么foo不再为零 - 或者在函数内起作用

tok*_*khi 11 ruby

为什么在下面的代码片段foo取代了它的定义?

def foo
  def foo
    1
  end
end
Run Code Online (Sandbox Code Playgroud)

这是第一次foo没有

foo
=> nil

foo.foo
=> 1
Run Code Online (Sandbox Code Playgroud)

现在,如果我foo再次打电话:

foo
=> 1
Run Code Online (Sandbox Code Playgroud)

你可以看到foo不再是零了.谁可以给我解释一下这个?谢谢.

Jos*_*Lee 7

def foo
  p "about to redef foo"
  def foo
    1
  end
end
Run Code Online (Sandbox Code Playgroud)
foo
"about to redef foo"
=> nil
foo
=> 1
Run Code Online (Sandbox Code Playgroud)

此外,当您调用时foo.foo,似乎您正在尝试访问内部foo方法,但它不会那样工作.您的foo方法实际上已定义Object,因此您实际上正在调用1.foo.