我将使用python作为我正在寻找的示例(如果您不了解Python,可以将其视为伪代码):
>>> a = 1
>>> type(a)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)
我知道在红宝石中我能做到:
1.9.3p194 :002 > 1.class
=> Fixnum
Run Code Online (Sandbox Code Playgroud)
但这是确定对象类型的正确方法吗?
tad*_*man 561
确定对象"类型"的正确方法是调用Ruby,这是Ruby世界中一个不稳定的术语object.class.
由于类可以从其他类继承,因此如果要确定对象是否属于"特定类型",则可以调用object.is_a?(ClassName)以查看object是类型ClassName还是派生类型.
通常,类型检查不是在Ruby中完成的,而是基于对象响应特定方法的能力来评估对象,通常称为" 鸭子打字 ".换句话说,如果它响应您想要的方法,则没有理由对该类型有所了解.
例如,object.is_a?(String)太严格了,因为另一个类可能实现将其转换为字符串的方法,或使其行为与String的行为方式相同.object.respond_to?(:to_s)将是一个更好的方法来测试相关对象做你想要的.
Aru*_*hit 73
你也可以尝试: instance_of?
p 1.instance_of? Fixnum #=> True
p "1".instance_of? String #=> True
p [1,2].instance_of? Array #=> True
Run Code Online (Sandbox Code Playgroud)
Stu*_*t M 42
通常在Ruby中,您实际上并不关心对象的类是什么,本身,您只关心它对某个方法的响应.这被称为Duck Typing,你会在各种Ruby代码库中看到它.
因此,在许多(如果不是大多数)情况下,最好使用Duck Typing #respond_to?(method):
object.respond_to?(:to_i)
Run Code Online (Sandbox Code Playgroud)
Dou*_*len 15
我会说"是".正如"Matz"在他的一次演讲中所说的那样,"Ruby对象没有类型." 不是全部,而是他试图传达给我们的部分.为什么有人会说"一切都是对象"呢?要添加他说"数据有类型而不是对象".
所以我们可能会喜欢这个.
https://www.youtube.com/watch?v=1l3U1X3z0CE
但Ruby并不关心类的对象类型.我们使用的类不是类型.然后所有数据都有一个类.
12345.class
'my string'.class
Run Code Online (Sandbox Code Playgroud)
他们也可能有祖先
Object.ancestors
Run Code Online (Sandbox Code Playgroud)
他们也有元类,但我会为你节省详细信息.
一旦你知道了这门课程,你就可以找到你可以使用的方法.这就是需要"数据类型"的地方.如果你真的想深入了解详细信息......
"Ruby对象模型"
这是Ruby用于处理对象的术语.这一切都是内部的,所以你并没有真正看到这一点,但很高兴知道.但这是另一个话题.
是! 该类是数据类型.对象具有类,数据具有类型.因此,如果您了解数据库,那么您就知道只有一组有限的类型.
文本块数字
小智 5
每个变量都有一个名为 class 的 prop。如果你打印它,它会告诉你它是什么类型。所以这样做:
puts a.class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
405075 次 |
| 最近记录: |