Ruby中的class()与type()

Chr*_*ins 41 ruby syntax

Ruby中的类和类型方法有什么区别?我注意到这种类型可以找到某些类的类型而不是其他类.

run*_*ako 48

关键的区别Object#type是不推荐使用.从RDoc for Object#类型:

Object#class的不推荐使用的同义词.

这就是你应该使用的原因Object#class:

返回obj的类,现在比Object#type更受欢迎,因为Ruby中的对象类型只是松散地绑定到该对象的类.必须始终使用显式接收器调用此方法,因为类也是Ruby中的保留字.

实际上,Object#respond_to?在大多数情况下,您可能希望使用而不是检查对象的类.

  • @Chris Collins扩展@kch的评论,大多数时候你想知道"这个对象是否能够打印它的名字?" 或者其他的东西.所以在这种情况下使用o.class == Person是一种钝器.最好做o.respond_to?(:display_name),它适用于Person,Dog或Company.谷歌Ruby Duck打字更多. (10认同)
  • 为什么要使用respond_to? (4认同)
  • 比照 鸭子打字. (2认同)

kch*_*kch 15

#type是一个同义词#class,但它在ruby 1.8中被弃用,显然已经从ruby 1.9中删除了.只是#class到处使用.


# For ruby 1.8

$ ri Object#type
------------------------------------------------------------ Object#type
     obj.type   => class
------------------------------------------------------------------------
     Deprecated synonym for Object#class.


# For ruby 1.9

$ ri1.9 Object#type
Nothing known about Object#type