有一个Ruby API在_str中引发异常,这可以接受吗?

有一个Ruby API在_str中引发异常,这可以接受吗?,ruby,string,Ruby,String,考虑这样一个小Ruby类: class C def to_str raise end end 让引发异常是否常见和/或可接受,或者是否有可能现有的库或惯用语中断此类C的对象 一点背景知识:我们的软件提供了一些Ruby模块(用C实现)。我们提供的一些类实际上是字符串,因此它们提供了一个to_str实现。不幸的是,定义此to_str方法的代码会在我们软件的其他(不相关)组件中导致错误。我们正在考虑的解决方法之一是在我们提供的所有类上始终定义to_str,但如果手头的

考虑这样一个小Ruby类:

class C
    def to_str
        raise
    end
end
引发异常是否常见和/或可接受,或者是否有可能现有的库或惯用语中断此类
C
的对象

一点背景知识:我们的软件提供了一些Ruby模块(用C实现)。我们提供的一些类实际上是字符串,因此它们提供了一个
to_str
实现。不幸的是,定义此
to_str
方法的代码会在我们软件的其他(不相关)组件中导致错误。我们正在考虑的解决方法之一是在我们提供的所有类上始终定义
to_str
,但如果手头的类型实际上不是字符串,则在运行时引发异常。我个人认为这是一个坏主意(例如,我们不能在不破坏向后兼容性的情况下收回它),但一些同事不同意。所以我试图收集论点来支持我的立场


在研究Ruby C源代码后,它发现UrOt有几个地方,Ruby的行为取决于一个类是否定义了一个<代码> toStrr 方法——该方法的纯粹存在使得Ruby认为它是一个“字符串”。也许这种测试

to_str
是否受支持的方式很常见,并且有流行的Ruby库使用这种方式,然后断言实际调用
to_str
不会引发异常?

好吧,首先,如果一个对象不支持to_str,它会引发NoMethodError。创建一个实现to_str的类只会抛出一个不同的错误是没有意义的…@MarcTalbot:正如我在我的问题中所写的,我们的代码库的一部分(完全不相关)有一个bug,它会被触发,因为我们有条件地将
定义为to_str
;由于此代码检查是否应支持
to_str
会触发此错误,因此我们考虑始终定义它-除非它真的很愚蠢(我怀疑是这样)。