Ruby:当您打开对象eigenclass并更改它时,提供真实世界的示例

时间:2017-02-14 12:55:49

标签: ruby eigenclass

来自C#世界我习惯认为类是对象的不可变定义,并且每个对象都有固定的类。

我试图让我的思想开始使用

class << some_object
  def something_unique_to_this_object
    # code
  end
end

我不是在谈论class << self 我在谈论改变一个或几个对象的类定义,但不是像class << self那样改变它们。

在几个月或几乎一年的时间里使用ruby我从未发现过这种情况,当我认为好的时候我可以打开这个对象eigenclass并更改它并保持同一类的大多数其他对象不变。请在使用时提供真实世界的示例。

1 个答案:

答案 0 :(得分:2)

你说&#34;不喜欢class << self&#34; 。好吧,猜猜是什么 - 类/模块方法正是以这种方式实现的。语法相似是有原因的。类定义中的self指的是类本身。您定义的任何类/模块方法实际上是该类/模块的本征类的方法。您的特定类只是类Class的一个实例。

对于其他示例,请查看类似rspec的内容。你将如何实现double并动态添加一些方法?你如何存根现有对象的方法? Eingenclasses非常适合它。

除了更多元使用之外,我有时也会在调试时发现它很舒服。就像我可以设置一个断点,改变一些对象的行为并在断点后继续看看会发生什么。您可能不希望影响该类的所有对象,或者该对象可能是匿名类的实例。