【发布时间】:2013-03-24 01:54:37
【问题描述】:
我将使用 python 作为我正在寻找的示例(如果您不了解 Python,可以将其视为伪代码):
>>> a = 1
>>> type(a)
<type 'int'>
我知道在 ruby 中我可以做到:
1.9.3p194 :002 > 1.class
=> Fixnum
但是这是确定对象类型的正确方法吗?
【问题讨论】:
-
@JörgWMittag 然而 AFAICR 这就是 `type` 在 Python 中所做的,尽管我的记忆很模糊。您需要
isinstance或检查回复。但只是说“不!!!”现在真的没有帮助,是吗?而是考虑具有教育意义。 -
@JörgWMittag 虽然我很同情,但 OP 提供了在 Ruby 中模仿的代码。除非您真的教育 OP 说不,IMO 没有帮助。即使你这样做了,它也可能只是信息性的,因为 OP 通过代码定义了他/她想要什么。
-
@JörgWMittag - 在 Ruby 中,一切都是对象,因此没有 Python 中的原始类型(int、long、boolean 等)。因此,在 Ruby 中,类是类型定义。这也不限于 Ruby,类和类型这两个词在其他几种语言中是同义词,在 OOP 理论中更广泛。
-
既然我们在这里真正谈论的是 Ruby,类型和类是同义词,对此没有争议,所有值都是对象。所以对于任何简单谈论 Ruby 的人来说,类 是 类型。 - 参考:ruby-lang.org/en/about
-
@JörgWMittag 到目前为止,这篇文章内容丰富,有机会我会阅读其余部分。特别是,库克似乎很好地表达了(并且比我拥有更多的背景知识)为什么声称(正如我的一位教授所做的那样)Python、Ruby 和其他动态类型语言“不是 真的面向对象”(他可能的意思是,没有意识到,它们不是面向 ADT 的)。但是 Ruby 不是静态类型的,因此它没有库克所描述的 ADT,因此您基于这种区别的反对意见没有帮助。