Ruby:如何确定irb和binding.pry中的对象类型?

时间:2017-02-11 16:50:23

标签: ruby irb pry

我刚刚开始在我的对象之后添加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>'

2 个答案:

答案 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 ,这是完全不同的东西。