Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的类()与类型()_Ruby_Syntax - Fatal编程技术网

Ruby中的类()与类型()

Ruby中的类()与类型(),ruby,syntax,Ruby,Syntax,Ruby中的类和类型方法有什么区别?我注意到类型可以查找某些类的类型,但不能查找其他类的类型。\code>类型是\class的同义词,但它在ruby 1.8中被弃用,显然已经从ruby 1.9中消失了。只要到处使用#class # For ruby 1.8 $ ri Object#type ------------------------------------------------------------ Object#type obj.type => class -----

Ruby中的类和类型方法有什么区别?我注意到类型可以查找某些类的类型,但不能查找其他类的类型。

\code>类型是
\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 #对于ruby 1.8 $ri对象#类型 ------------------------------------------------------------对象类型 obj.type=>class ------------------------------------------------------------------------ 对象#类的不推荐同义词。 #对于ruby 1.9 $ri1.9对象类型 对对象类型一无所知
关键区别在于
Object#type
已被弃用。从对象类型的RDoc:

对象#类的不推荐同义词

下面是您应该使用
Object#class
的原因:

现在返回obj的类 优先于对象类型,例如 Ruby中对象的类型只是松散的 绑定到该对象的类。这 方法必须始终使用 显式接收方,因为类也是 红宝石中的保留字


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

如果它是同义词,为什么在我自己定义的类上调用type时会出现未定义的方法错误?但是当我为同一个类调用class方法时,同样的事情不会发生。未定义的方法错误听起来和不推荐使用的方法不一样。您使用ruby 1.9吗?在ruby 1.8上,我没有收到任何错误,只是收到了一个关于弃用的警告。如果你在ruby 1.9上,弃用意味着它会在某个时候被删除,看起来1.9就是那个时候。如果它是同义词,为什么在我自己定义的类上调用type时会出现未定义的方法错误?但是当我为同一个类调用class方法时,同样的事情不会发生。“未定义的方法错误听起来不像是不推荐使用的方法会出现的错误。@Chris Collins我的猜测是文档已关闭,并且它不是严格的同义词。重点仍然是对象#type是一个无用的方法。@Chris Collins在@kch的评论上进行了扩展,大多数时候你想知道“这个对象能够打印它的名称吗?”或者其他什么。因此,在这种情况下,使用o.class==Person是一种迟钝的工具。更好的做法是做o.respond_to?(:display_name),这将对一个人、一条狗或一家公司起作用。谷歌红宝石鸭输入更多。