0

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

我试图敞开心扉接受使用的可能性

class << some_object
  def something_unique_to_this_object
    # code
  end
end

我不是在谈论class << self
我说的是更改一个或多个对象的类定义,但并非所有对象都喜欢class << self

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

4

1 回答 1

2

你说“不喜欢class << self。好吧,你猜怎么着——类/模块方法就是这样实现的。语法相似是有原因的。self类定义内部是指类本身。您定义的任何类/模块方法实际上都是该类/模块的特征类的方法。您的特定类只是该类的一个实例Class


对于其他示例,请查看类似 rspec 的内容。你将如何实现一个双精度并动态添加一些方法?您将如何存根现有对象的方法?Eingenclasses 是一个简单而完美的选择。


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

于 2017-02-14T13:15:32.873 回答