我将使用python作为我正在寻找的示例(如果你不了解python,你可以将其视为伪代码):

>>> a = 1
>>> type(a)
<type 'int'>

我知道在红宝石我可以做:

1.9.3p194 :002 > 1.class
 => Fixnum 

但这是确定对象类型的正确方法吗?


当前回答

我会说“是的”。 马茨在一次演讲中说过类似的话, “Ruby对象没有类型。” 不是全部,而是他想要传达给我们的部分。 为什么会有人这么说 “一切都是客体”? 他补充说:“数据只有类型,没有对象”。

RubyConf 2016 -松本幸博的开幕主题演讲

但是Ruby并不像类那样关心对象的类型。 我们使用类,而不是类型。因此,所有数据都有一个类。

12345.class

'my string'.class

类也可以有祖先

Object.ancestors

它们也有元类,但我会把细节留给你们。

一旦你知道了这个类,你就可以查找你可以为它使用什么方法。这就是需要“数据类型”的地方。 如果你真的想了解细节,查一下…

Ruby对象模型

这是用于Ruby如何处理对象的术语。这都是内部的,所以你看不太清楚,但很高兴知道。但那是另一个话题了。

是的!类是数据类型。对象有类,数据有类型。所以如果你了解数据库,你就会知道只有有限的类型。

文本块 数字

其他回答

通常在Ruby中,你并不关心对象的类是什么,本质上,你只关心它对某个方法的响应。这就是所谓的Duck Typing,您将在各种Ruby代码库中看到它。

所以在许多(如果不是大多数)情况下,最好使用#respond_to?(method)来使用Duck Typing:

object.respond_to?(:to_i)

每个变量都有一个名为类的道具。如果你打印它,它会告诉你它是什么类型。所以这样做:

puts a.class

你也可以试试:instance_of?

p 1.instance_of? Fixnum    #=> True
p "1".instance_of? String  #=> True
p [1,2].instance_of? Array #=> True

variable_name.class

这里变量名是a a.class

我会说“是的”。 马茨在一次演讲中说过类似的话, “Ruby对象没有类型。” 不是全部,而是他想要传达给我们的部分。 为什么会有人这么说 “一切都是客体”? 他补充说:“数据只有类型,没有对象”。

RubyConf 2016 -松本幸博的开幕主题演讲

但是Ruby并不像类那样关心对象的类型。 我们使用类,而不是类型。因此,所有数据都有一个类。

12345.class

'my string'.class

类也可以有祖先

Object.ancestors

它们也有元类,但我会把细节留给你们。

一旦你知道了这个类,你就可以查找你可以为它使用什么方法。这就是需要“数据类型”的地方。 如果你真的想了解细节,查一下…

Ruby对象模型

这是用于Ruby如何处理对象的术语。这都是内部的,所以你看不太清楚,但很高兴知道。但那是另一个话题了。

是的!类是数据类型。对象有类,数据有类型。所以如果你了解数据库,你就会知道只有有限的类型。

文本块 数字