在Ruby中重写to_s方法不好?

我一直在试验,发现我喜欢重新定义Object的to_s方法。

这是一个坏主意,还是很好的做法?

不,你应该随时重写to_s – 没有不良的副作用。 只要你的新东西比内置的(不完全是一个高标准)更丰富的信息,你就清楚了。

而且,它们可以帮助您将testing失败读得更好 – 有时甚至是很多 – 这绝不是一件坏事。 去吧!

我一直在我的Rails项目中覆盖to_s

    def to_s
      first_name +“”+ last_name
   结束

以便在视图中显示对象更容易:

 <%= @person%>

这样做可能会很棘手,因为有时候, inspect方法只是调用to_s ,如果改变了,你可能在debugging时遇到麻烦。 如果你认为当你需要通过依赖inspect的方法(如p来查看结果时,改变to_s可能会使你感到困惑,那么也许你需要同时为这个类重新定义inspect 。 只要你确定你在做什么,你可能想要做。

本身并不“坏”,但也不是“好”。 这真的取决于上下文。

如果你正在做一个单一的地方(例如在你的rails应用程序的/lib/文件夹中,对于一个特定的应用程序),这可能是好的(确保给这个文件一个描述性的名字,比如object_to_s_patch.rb或类似的,而且所有的补丁都在同一个地方)

另一方面,如果你正在做一个gem或一个库,我不会覆盖它。 相反,我会添加另一种方法 – Object.to_special_s什么的。 但是,如果可能的话,我也尽量不要触摸对象 – 如果你可以通过使用YourModule::to_s(object)来得到,那可能会更好。

这背后的原因是其他人可能使用Object.to_s作为其他的东西,也许在其他库。 monkeypatching它会产生与其他库的冲突。

我能想到的唯一例外就是当图书馆的要点(或其中一个要点)实际上压倒了方法; 换句话说,你是从字面上做一个重写Object.to_s ,而不是别的。 我会在这个案子的文件上提出一些大的警告。 这样使用它的人不会感到惊讶。