ruby是否对所有x都有一个标识函数,即x.fn == x?

时间:2013-10-24 06:17:00

标签: ruby

有时当我将方法名称作为参数传递时,我发现自己希望使用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),但有时迂腐模糊了这个问题。

3 个答案:

答案 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版本中实现。