21

メソッド名を引数として渡すとき、次のような恒等関数が欲しいと思うことがany_obj.send(:identity) == any_objあります。

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

私はちょうど書くことができました

my_obj.send(transform || :identity)

(これは少し不自然な例です。より複雑な例では、ID 関数はいくつかのキーストロークを節約する以上のことを行うことができます。)

Object の定義を開いて追加するのは簡単ですが、見落としているものは既にありますか? 他の誰かもこれを望んでいますか?

PS: 私の例が実際に述べられるべきであることはわかっていますがany_obj.send(:identity).equal?(any_obj)、衒学者が質問を曖昧にすることがあります。

4

3 に答える 3

30

はい。あなたが探しているのObject#itselfは、Ruby 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#itselfmethodを持っているようです。

于 2013-10-24T06:23:05.983 に答える
2

今のところ何もありませんが、Matz はそのような方法を実装することを支持する意見を表明しています: https://bugs.ruby-lang.org/issues/6373。Ruby の将来のバージョンで実装される可能性があります。

于 2013-10-24T06:22:41.233 に答える