Ответ 1
Да. Вы ищете Object#itself
, который доступен в Ruby 2.2 +.
Из документов:
сам → an_object
Возвращает obj.
string = 'my string' #=> "my string" string.itself.object_id == string.object_id #=> true
Иногда, когда я передаю имя метода в качестве аргумента, я нахожусь в поиске функции идентификации, такой, что any_obj.send(:identity) == any_obj
, поэтому вместо этого:
(transform.nil?) ? my_obj : my_obj.send(transform)
Я мог просто написать
my_obj.send(transform || :identity)
(Это немного надуманный пример - функция идентификации может сделать больше, чем сэкономить несколько нажатий клавиш в более сложных примерах.)
Было бы достаточно легко открыть определение объекта и добавить его, но есть ли что-то уже там, что я забыл? Кто-нибудь еще хочет этого?
P.S.: Я знаю, что мой пример действительно должен быть указан any_obj.send(:identity).equal?(any_obj)
, но иногда педантизм скрывает вопрос.
Да. Вы ищете Object#itself
, который доступен в Ruby 2.2 +.
Из документов:
сам → an_object
Возвращает obj.
string = 'my string' #=> "my string" string.itself.object_id == string.object_id #=> true
Ваш вопрос связан с этим. Похоже, теперь Ruby будет иметь метод #itself
.
На данный момент этого нет, но Мац высказал мнение о том, что такой метод будет реализован: https://bugs.ruby-lang.org/issues/6373. Вероятно, он будет реализован в будущих версиях Ruby.