首页 > 解决方案 > Ruby 相当于 Python 的`repr()`?

问题描述

是否有与 Pythonrepr方法等效的 Ruby?我想获得任何给定 ruby​​ 对象的字符串表示形式,其中列出了所有属性、它们的值和所有方法。

我定义了以下方法,但我想知道是否有更规范的方法来做到这一点......

def repr
  attrhash = {}
  instance_variables.sort.each {
    |v|
    attrhash[v] = instance_variable_get(v)
  }
  [ self, self.class.instance_methods.sort, attrhash ].to_s
end

理想情况下,我不想将此方法包含到我想要类似数据的每个类中repr,并且我想知道是否有标准的 ruby​​ 机制来获取任何给定对象的此信息。

标签: rubyrepr

解决方案


__repr__在 Ruby中没有 Python 的等价物。乍一看,最接近的可能#inspect因为这些相似之处:

这通常用于调试,[…]

返回一个字符串,其中包含obj的人类可读表示。

但是,有一个重要的区别:

如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。

对于许多类型,此函数尝试返回一个字符串,该字符串在传递给时会产生具有相同值的对象eval()

Ruby#inspect专注于人类可读性,而 Python__repr__试图实现“ eval()-round-trippable”(即eval(repr(e)) == e),换句话说,它应该是机器可读的


推荐阅读