Есть ли способ перезаписать объект `{ }`?
Я пытаюсь сделать все хеши в моей программе ActiveSupport::OrderedHash.
Я могу переопределить конструктор Hash.new ::Hash = ActiveSupport::OrderedHash
но {}.class
все еще хэш
def {}
дает мне синтаксическую ошибку.
Было рекомендовано, что это дубликат этого вопроса, но я не думаю, что это так. Мой вопрос не о создании подкласса Hash, а о перезаписи по умолчанию { }
=> Хеш конструктор.
2 ответа
Хэш буквальный {}
в Ruby жестко запрограммирован, и вы не можете его изменить. {}
станет Hash
, Тем не менее, поскольку класс Ruby можно изменить, вы можете удалить все ненужные методы, константы, переменные из Hash
и скопируйте все, что есть в ActiveSupport::OrderedHash
в Hash
,
Существует всего несколько языков, которые позволяют перегружать литералы (я знаю только два: Ioke и Seph). Руби не один из них.
Смотрите также перегрузку Ruby's […]
Сокращение создания массива, какой метод вызывается […]
в рубине? и как перехватить вызов конструктора класса Hash
?,