一些奇怪的 Ruby 行为

简介: 一些奇怪的 Ruby 行为

最近因为给大家分享一些 Ruby 基础的内容,也有一些 Ruby 元编程的东西。然后发现了一些比较“奇怪”的 ruby 行为。

比如说下面这个:

class Foo
    def method_one
       def method_two
       end
    end
end

如果我们直接调用:

Foo.new. method_two

则会报错: undefined methodmethod_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这个方法。

对于类方法来说也一样。

是不是挺有趣的?大家有没有其他的类似的一起分享一下?

相关文章
Ruby Programming | 连载 07 - Ruby 对象的原生行为
Ruby Programming | 连载 07 - Ruby 对象的原生行为
Ruby Programming | 连载 07 - Ruby 对象的原生行为
|
敏捷开发 程序员 Ruby
《面向对象设计实践指南:Ruby语言描述》—第1章 1.3节设计行为
随着常见设计原则和模式的出现与传播,所有的OOD问题可能都已被解决。既然基础的规则都已知道,那么设计面向对象的软件还会有多难呢?
1340 0
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
JSON 数据格式 Ruby
|
6月前
|
调度 Ruby
|
6月前
|
存储 JSON 数据格式
|
6月前
|
Ruby