ruby - 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 机制来获取任何给定对象的此信息。
解决方案
__repr__
在 Ruby中没有 Python 的等价物。乍一看,最接近的可能是,#inspect
因为这些相似之处:
和
但是,有一个重要的区别:
如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。
和
Ruby#inspect
专注于人类可读性,而 Python__repr__
试图实现“ eval()
-round-trippable”(即eval(repr(e)) == e
),换句话说,它应该是机器可读的。
推荐阅读
- javascript - 在 Node.js 中获取嵌套 SQL 查询的空响应
- azure - 部署后自动删除 Azure 虚拟机
- javascript - 为什么我的数组参数不在 POST 请求中?
- c++ - 如何提高 Prime Generator(SPOJ) 解决方案的效率?
- c++ - “原始计算器” - 创建除法循环的问题
- javascript - 为什么 jQuery 禁用的元素在 jQuery mobile 中看起来是可触摸的?
- c++ - 使用多个 CDHtmlDialogs 保持未释放的内存。(导航相同的 Url)
- reactjs - react-testing-library - 使用 useContext 钩子的测试组件 - 上下文在测试之间持续存在
- tsql - TSQL:将连续时隙分组在一起
- assembly - 在汇编的情况下,编程模型与程序计数器和堆栈指针之间的区别是什么?