是否有与Python的repr
方法等效的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机制来获取此方法给定对象的信息。
答案 0 :(得分:3)
在Ruby中没有Python的__repr__
等价物。乍一看,由于这些相似之处,最接近的事物可能出现为#inspect
:
和
Returns a string containing a human-readable representation of obj.
但是,有一个重要的区别:
如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值(在适当的环境下)的对象。
和
Ruby的#inspect
专注于人类可读,而Python的__repr__
则试图做到“ eval()
可以实现三重跳转”(即{{1} }),换句话说,它应该是机器可读的。
答案 1 :(得分:3)
基于jeremy04
和Jörg W Mittag
的有用评论,我意识到Ruby中没有与repr
相对应的内容,并且我不能使用简单的{在所有类实例中类似于{1}}的方法,而自身没有猴子补丁repr
。但是,我意识到,如果仅使class Object
为独立函数,则可以在不进行猴子补丁的情况下获得相同的功能,并且只要需要此信息,就可以使用repr
而不是repr(obj)
给定的对象。以下独立功能有效...
obj.repr
我有此函数返回哈希值而不是字符串,以便可以执行以下操作:
def repr(obj)
attrhash = {}
obj.instance_variables.sort.each {
|v|
attrhash[v] = instance_variable_get(v)
}
{
:string => obj.inspect,
:methods => obj.class.instance_methods.sort,
:attributes => attrhash
}
end
。
如果我想要一个字符串,我总是可以做repr(obj)[:attributes]
。
此外,我可以将其设置为类。我将其留给读者练习。 :)
答案 2 :(得分:1)
config(['queue.default' => \App\Helpers\ConfigConstants::DUSK_CONNECTION]); //this does not affect the headless browser but IS probably necessary here so that assertQueued knows to pull from the queue that the headless browser was using.
与Ruby中的inspect
最接近,但是它不显示公共方法。
如果您正在寻找工具,则:repr
https://github.com/pry/pry
pry
命令完全可以满足您的需求。
您也可以将撬动功能集成到irb / rails控制台中。
或者,您可以用自己的方法修补ls
,但是我觉得那是一个极端的选择,有很多缺点。