Ruby对象没有'to_s'

3

在Ruby中,是否存在不响应to_s的对象?

这个问题并不是想问是否可以创建一个不响应to_s的对象,我知道可以通过undef_method来实现。请随意解释细节,包括取消定义的注意事项。


这是一个不完整和过于概括的回答,因此我将其作为评论发布。在一个相当标准的情况下,大部分你使用的都是模型,答案是否定的。然而,正如你在自己的问题中所暗示的那样,构造一些不支持它的东西是非常容易的。Ruby 中的几乎所有东西都是数组,因此始终可以进行字符串表示。但你是否实际想要这样做则是另外一个问题了。 - Cninroh
2个回答

5
< p > BasicObject 类没有定义 to_s 方法,因此该类的任何实例都没有 to_s 方法。


1
如果您想从头创建一个类,请使用BasicObject,但请确保您不需要标准类中的任何功能。 - Jonas Fagundes

0
我们不应该对子类进行特化,因为这样子类就不再满足父类的期望了,请参考Liskov替换原则

这并没有回答主要问题,但这确实是我在请求更多细节时想到的,所以当然谢谢! - Matthias Michael Engh
3
在Ruby中,所有的类默认都继承自Object(你必须显式地从BasicObject继承才能避免默认父类)。因此,“在Ruby中是否有任何不响应to_s方法的对象?”的答案是没有 :) (BasicObject不是Object,但反过来是正确的 :)) - Jonas Fagundes
2
在 Ruby 的上下文中,“对象”这个术语是含糊不清的。在第一种意义下,它表示(一个实例)Object 类,并且通常不写成“一个对象”,而是写成大写的“(一个实例) Object”。在另一种意义下,它表示面向对象编程中对象的含义,包括 BasicObject 类的实例。你将 OP 的写作“是否有任何对象…”改写为“是否有任何 Objects…”(加粗是我添加的),但那是你的技巧。也许你已经注意到了 OP 指的是第二个意义的对象,而不是第一个。 - sawa
1
@sawa 你最好查看一下问题的修订历史。 - Stefan Pochmann
1
哦,对不起。乔纳斯的评论是正确的。 - sawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接