考虑一个像这样的小型Ruby类:
class C
def to_str
raise
end
end
让to_str
引发异常是否常见和/或可接受,或者是否存在可能会破坏此类C
对象的现有库或习语?
一些背景知识:我们的软件提供了一些Ruby模块(用C实现)。我们提供的一些类实际上是字符串,因此它们提供to_str
实现。不幸的是,定义此to_str
方法的代码会导致我们软件的其他(不相关)组件出现错误。我们正在考虑的一个解决方法是总是在我们提供的所有类上定义to_str
- 但是在运行时引发异常,以防手头的类型实际上不是字符串。我个人认为这是一个坏主意(例如,我们不能在不破坏向后兼容性的情况下收回它),但有些同事不同意。所以我正试图收集支持我的立场的论据。
在研究了Ruby C源代码之后,根据一个类是否定义了一个to_str
方法,有些地方Ruby的行为有所不同 - 该方法的绝对存在使Ruby认为它是一个'字符串'。也许这种对to_str
是否受支持的测试方式很常见,并且有流行的Ruby库使用它,然后断言实际调用to_str
不会引发异常?