有时当我将方法名称作为参数传递时,我发现自己希望使用any_obj.send(:identity) == any_obj
这样的身份函数,而不是这样:
(transform.nil?) ? my_obj : my_obj.send(transform)
我可以写
my_obj.send(transform || :identity)
(这是一个人为的例子 - 身份函数可以做的不仅仅是在更复杂的例子中保存一些按键。)
打开Object的定义并添加它会很容易,但是我已经忽略了哪些内容?还有其他人想要这个吗?
P.S。:我知道我的例子应该说明any_obj.send(:identity).equal?(any_obj)
,但有时迂腐模糊了这个问题。
答案 0 :(得分:26)
是。您正在寻找可在Ruby 2.2 +中使用的Object#itself
。
来自the docs:
本身→an_object
返回obj。
string = 'my string' #=> "my string" string.itself.object_id == string.object_id #=> true
答案 1 :(得分:8)
您的问题与this one有关。现在看来,Ruby is going to have #itself
method。
答案 2 :(得分:2)
目前还没有,但Matz表达了支持这种方法的意见:https://bugs.ruby-lang.org/issues/6373。它可能会在未来的Ruby版本中实现。