我刚刚开始在我的对象之后添加binding.pry,以便开始确定他们评估的内容。但是,现在我想知道输出的对象类型。
我怎样才能在irb中这样做?我怎么能在binding.pry中做到这一点?
编辑: 这是我试图确定对象H的类型。我知道它是一个哈希,但有时它在控制台中不太明显:
irb(main):001:0> H = Hash["a" => 100, "b" => 200]
=> {"a"=>100, "b"=>200}
irb(main):002:0> H
=> {"a"=>100, "b"=>200}
irb(main):003:0> type(H)
NoMethodError: undefined method `type' for main:Object
from (irb):3
from /Users/macbook/.rbenv/versions/2.3.0/bin/irb:11:in `<main>'
irb(main):004:0> object.class(H)
NameError: undefined local variable or method `object' for main:Object
Did you mean? object_id
from (irb):4
from /Users/macbook/.rbenv/versions/2.3.0/bin/irb:11:in `<main>'
irb(main):005:0> object.is_a?(H)
NameError: undefined local variable or method `object' for main:Object
Did you mean? object_id
from (irb):5
from /Users/macbook/.rbenv/versions/2.3.0/bin/irb:11:in `<main>'
答案 0 :(得分:3)
您可以使用
获取class
h = {a: 100, b: 200}
h.class
# Hash
您还可以检查某些内容是否属于特定类
h.is_a? Hash
# true
h.is_a? String
# false
答案 1 :(得分:0)
Ruby语言没有“类型”的概念。或者,更确切地说:在Ruby中,类型只存在于程序员的脑海中,它们不会在程序中显示出来。因此,无法从程序中获取对象的类型,只能从程序员处获取。
有时,类型会记录在文档或注释中。有些类型基本上是社区民俗,不是在任何地方写下来的,而是代代相传的。
您可以向对象询问其class,您可以询问它methods,您可以问whether it responds to a specific message,但您无法询问它的类型。
请注意,旧版本的Ruby有一个type
,但该方法已被删除,因为它具有误导性:它实际上并没有返回类型(我在上面解释了为什么这是不可能的),它返回了 class ,这是完全不同的东西。