当前位置: 首页 > 知识库问答 >
问题:

在ruby中确定对象的类型

席银龙
2023-03-14

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

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

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

1.9.3p194 :002 > 1.class
 => Fixnum 

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

共有3个答案

鲁单弓
2023-03-14

通常在Ruby中,您实际上并不关心对象的类是什么,本身,您只关心它响应某个方法。这被称为Duck Typing,您会在各种Ruby代码库中看到它。

因此,在许多(如果不是大多数)情况下,最好使用<code>#respond_to的Duck Type?(方法):

object.respond_to?(:to_i)
柴岳
2023-03-14

您也可以尝试:instance_of?

p 1.instance_of? Fixnum    #=> True
p "1".instance_of? String  #=> True
p [1,2].instance_of? Array #=> True
太叔烨霖
2023-03-14

确定对象“类型”的正确方法是调用object.class,这在Ruby世界中是一个不稳定的术语。

由于类可以从其他类继承,如果要确定对象是否为“特定类型”,可以调用<code>对象。是吗?(ClassName)以查看对象是否属于ClassName类型或从中派生。

通常在Ruby中不进行类型检查,而是根据对象对特定方法的响应能力来评估对象,通常称为“Duck类型”。换言之,如果它响应您想要的方法,那么就没有理由对类型有任何要求。

例如,<code>对象。是吗?(String)过于严格,因为另一个类可能实现将其转换为字符串的方法,或者使其行为与String的行为相同<代码>对象。回复?(:to_s)将是测试问题对象是否满足您需要的更好方法。

 类似资料:
  • 问题内容: 有没有一种简单的方法来确定变量是列表,字典还是其他?我回来的对象可能是任何一种类型,我需要能够分辨出两者之间的区别。 问题答案: 有两个内置函数可以帮助你识别对象的类型。你可以使用,如果你需要一个对象的确切类型,并以检查对象的反对的东西类型。通常,你希望使用大多数时间,因为它非常健壮并且还支持类型继承。 要获取对象的实际类型,请使用内置函数。将对象作为唯一参数传递将返回该对象的类型对象

  • 主要内容:实例,在 Ruby 中定义类,Ruby 类中的变量,实例,实例,在 Ruby 中使用 new 方法创建对象,自定义方法来创建 Ruby 对象,实例,Ruby 类中的成员函数,简单的案例研究Ruby 是一种完美的面向对象编程语言。面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论。 一个面向对象的程序,涉及到的类和对象。类是个别对象创建的蓝图。在面向对象的术语中,您的自行车是自行车类的一个实例。 以车辆为例,它包括车轮(whee

  • 问题内容: 如果class 和class 扩展了class 并且我有一个对象类型或,我如何确定它是实例的哪种类型? 问题答案:

  • 问题内容: 尝试将类类型的对象添加到 JArray时 遇到以下错误。 这是我正在使用的代码: 在运行程序时,我将其命名如下: 如何转换 _JArray(JArray) 内的 AmountModel(类) 以被系统识别为JSON对象? 非常感谢您的回答。 谢谢。 问题答案: 为了将任意非原始POCO添加到中,您必须使用以下重载之一显式序列化它: (另请注意,我已更正了循环中的结束条件。它是,导致出现

  • 本文向大家介绍浅析Ruby中的类对象的概念,包括了浅析Ruby中的类对象的概念的使用技巧和注意事项,需要的朋友参考一下  面向对象的程序涉及类和对象。 一个类是蓝本,从个别对象被创建。在面向对象的术语,我们说小明的自行车是被称为自行车类的对象实例。 任何车辆的例子。它包括轮子,马力,燃油或燃气罐容量。这些特点形成的类车辆的数据成员。可以从其他车辆区分这些特征。 车辆也有一定的功能,如停止,驾驶,超

  • 问题内容: 我有三个类(,和),它们扩展了另一个类()。如何判断对象属于哪个子类?到目前为止,我有一个具有类名称的属性,但是我认为可以使用类似于javascript的typeof的运算符。(类似:) 问题答案: 您可以使用关键字。 但是请注意,需要使用它通常是不良设计的标志。通常,您应该在每个派生类中编写方法覆盖,以便您无需显式地检查是哪个类。