我认为inspect
会转储对象的内容,但是我得到的远远超过了解要包含的对象。我在do
... end
块内倾倒了。是否有另一种类似于inspect
的方法,它只提供对象包含的内容,或者一个inspect
如何没有上下文?
答案 0 :(得分:0)
inspect
应该打印对象的人类可读表示。它通常用于跟踪语句中。默认情况下,它将打印对象的类,对象ID和与其值相关联的实例变量。因此,它允许您快速确定对象的类型,标识和属性。
还要考虑to_s
方法,该方法应该将对象转换为字符串;它通常只使用对象的属性组成一个新的字符串表示;它可能会也可能不会全部使用它们。
这两种方法都不会考虑其接收器。
答案 1 :(得分:0)
Object#inspect
不是转储对象内容的方法,它只是对象的字符串表示,意味着人类可读。
单个类或对象可能会覆盖此方法的行为以返回所需的任何字符串。默认行为是显示类名,对象ID和任何实例变量(通过在每个变量上调用#inspect
将其转换为字符串)。这种递归级别,其中实例变量也是#inspect
,这可能是您看到比预期更多“上下文”的原因。
如果您正在寻找将对象内容转储为字符串的方法,以便可以从该字符串重新创建它,您应该查看Marshal
。 str = Marshal.dump(obj)
尝试将对象的内容转储为字符串,而obj = Marshal.load(str)
将字符串转换回对象。
答案 2 :(得分:0)
如其他答案中所述,inspect
用于通过转储对象的所有内容(obj的人类可读表示)进行调试。
我认为您可能会发现to_yaml
在您的案例中更有用:
object.to_yaml
# #=> --- !ruby/object:ObjectType
# attr1 => value
# attr2 => value
# ... etc
我还发现在puts
提供更可读的控制台输出之前添加to_yaml
:
puts object.to_yaml