如果我调用方法a一次,它只调用外部方法.当我第二次调用它时,它会调用inside方法.
class A
def a
puts "outside method"
def a
puts "inside method"
end
end
end
A.new.a # => outside method
A.new.a # => inside method
Run Code Online (Sandbox Code Playgroud)
你能解释它是如何工作的吗?
原因是嵌套方法始终应用于包含类.第二种方法将被添加到A类中,因为它是第一种方法的包含类.
但是,只有在评估其正文代码时才会添加它,并在首次调用外部方法时对其进行评估.
class Test
def foo
puts "outside method"
def bar
puts "inside method"
end
end
end
test = Test.new
test.methods - Object.methods # => [:foo]
test.foo
test.methods - Object.methods # => [:foo, :bar]
Run Code Online (Sandbox Code Playgroud)
在ruby中,在类中定义具有相同名称的方法两次将覆盖第一个版本.
class Test
def foo
"first version"
end
def foo
"second version"
end
end
test = Test.new
test.foo # => "second version"
Run Code Online (Sandbox Code Playgroud)
因此,在第一次执行之后A#a,内部实现仍然存在.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |