Есть ли способ перезаписать объект `{ }`?

Я пытаюсь сделать все хеши в моей программе ActiveSupport::OrderedHash.

Я могу переопределить конструктор Hash.new ::Hash = ActiveSupport::OrderedHash но {}.class все еще хэш

def {} дает мне синтаксическую ошибку.

Было рекомендовано, что это дубликат этого вопроса, но я не думаю, что это так. Мой вопрос не о создании подкласса Hash, а о перезаписи по умолчанию { } => Хеш конструктор.

2 ответа

Решение

Хэш буквальный {} в Ruby жестко запрограммирован, и вы не можете его изменить. {} станет Hash, Тем не менее, поскольку класс Ruby можно изменить, вы можете удалить все ненужные методы, константы, переменные из Hashи скопируйте все, что есть в ActiveSupport::OrderedHash в Hash,

Существует всего несколько языков, которые позволяют перегружать литералы (я знаю только два: Ioke и Seph). Руби не один из них.

Смотрите также перегрузку Ruby's […] Сокращение создания массива, какой метод вызывается […] в рубине? и как перехватить вызов конструктора класса Hash ?,

Другие вопросы по тегам