2
class A
    def p
        puts "1"
    end
end

a = A.new
a.p   #=> "1"

class A
    def p
        puts "2"
    end
end

a.p   #=>"2"

这个红宝石属性叫做“Open Class”吗?还有其他语言有这个属性吗?

4

2 回答 2

4

是的,这在 Ruby中称为开放类。在我的脑海中,具有此属性的其他语言包括 Python 和 Smalltalk。此外,即使它们没有类,在 ECMAScript、Self、Io 和 Ioke 中对原型对象进行变异也会产生类似的效果。

于 2012-04-26T09:29:55.833 回答
1

尽管在 Smalltalk 中有一些方法可以做到这一点,但我倾向于问你为什么觉得你想要这样做并推动不同的解决方案。在运行时更改代码是使代码难以调试的秘诀。

于 2012-05-01T00:01:09.853 回答