最近因为给大家分享一些 Ruby 基础的内容,也有一些 Ruby 元编程的东西。然后发现了一些比较“奇怪”的 ruby 行为。
比如说下面这个:
class Foo
def method_one
def method_two
end
end
end
如果我们直接调用:
Foo.new. method_two
则会报错: undefined method
method_two' for #Foo:0x00007fbe4ac1f5d8 (NoMethodError)`
此时我们执行:
Foo.instance_methods false
会返回:
[:method_one]
但是我们一旦执行一下:
Foo.new.method_one
这时我们再执行
Foo.instance_methods false
那么返回的就是:
[:method_one, :method_two]
虽然行为有点怪异,不过如果按照 Ruby 设计的理念,其实也很好解释:
def
是用来定义一个实例方法,def method_one
这里在定义的时候并没有执行,method_one
必须要有一个实例调用后才会执行,
所以此时并没有method_two
这个方法。
对于类方法来说也一样。
是不是挺有趣的?大家有没有其他的类似的一起分享一下?