Dynamic Class Definition.

A Ruby program (or a user of the REPL) can change class definition while a Ruby program is running.

很符合我对 dynamically typed language 的想象:Ruby 真是把这一点做到了极致。在运行时改变类的定义后,所有该类的实例,甚至包括修改之前创造的实例都将发生改变。

这是因为 Ruby 严格遵循了这一 OOP 规则:Every object has a class and the (current) class (definition) defines an object’s behavior.

这一 feature 经常被人质疑,因为其破坏了封装 (breaks abstraction):如果我对方法 + (计算两数之和) 进行更改或直接删除,那么绝大多数程序都将无法正常运行。

但其确实使得 language definition 变得更加简单:Defining classes and changing their definitions is just a run-time operation like everything else.

对类的定义进行动态更改 (具体表现在修改已有的方法或添加新的方法) 的语法十分简单:Just give a class definition including method definitions for a class that is already defined. 若给出的方法已被定义 (与已有的方法重名),则其将替换类中原有的方法定义;反之,其将作为一个新方法加入类的定义中。