ruby对于所有x都有一个标识函数iexfn == x吗?

fea*_*ool 18 ruby

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

(transform.nil?) ? my_obj : my_obj.send(transform)
Run Code Online (Sandbox Code Playgroud)

我可以写

my_obj.send(transform || :identity)
Run Code Online (Sandbox Code Playgroud)

(这是一个人为的例子 - 身份函数可以做的不仅仅是在更复杂的例子中保存一些按键.)

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

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

Aje*_*i32 26

是.您正在寻找Object#itself,可在Ruby 2.2+中找到.

来自文档:

本身→an_object

返回obj.

string = 'my string' #=> "my string"
string.itself.object_id == string.object_id #=> true
Run Code Online (Sandbox Code Playgroud)


Bor*_*cky 8

你的问题与这个问题有关.现在看来,Ruby 将会有#itself方法.

  • 知道我在问一个明智的问题,这让我很放心.谢谢. (2认同)