21

有时,当我将方法名称作为参数传递时,我发现自己希望有一个身份函数any_obj.send(:identity) == any_obj,所以,而不是这个:

(transform.nil?) ? my_obj : my_obj.send(transform)

我可以写

my_obj.send(transform || :identity)

(这是一个人为的例子——在更复杂的例子中,一个恒等函数可以做的不仅仅是节省一些击键。)

打开 Object 的定义并添加它会很容易,但是我已经忽略了一些东西吗?其他人也想要这个吗?

PS:我知道我的例子确实应该说明any_obj.send(:identity).equal?(any_obj),但有时迂腐掩盖了这个问题。

4

3 回答 3

30

是的。您正在寻找Object#itselfRuby 2.2+ 中提供的 .

文档

自身 → an_object

返回 obj。

string = 'my string' #=> "my string"
string.itself.object_id == string.object_id #=> true
于 2015-01-30T20:00:53.840 回答
8

您的问题与有关。现在看来,Ruby将有#itself方法

于 2013-10-24T06:23:05.983 回答
2

目前还没有,但 Matz 表达了支持实施这种方法的观点:https ://bugs.ruby-lang.org/issues/6373 。它很可能会在 Ruby 的未来版本中实现。

于 2013-10-24T06:22:41.233 回答