2015-12-22 4 views
2

Я пытаюсь сделать все хэш в моей программе ActiveSupport :: OrderedHash.Есть ли способ переписать объект `{}`?

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

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

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

+1

Нет. Это не объект, это синтаксис. Это как просить * «Могу ли я перезаписать' if' "*. – ndn

+1

Возможный дубликат [Как я могу переопределить метод \ [\] = при подклассификации хеша ruby?] (Http://stackoverflow.com/questions/12989011/how-can-i-override-the-method-when- subclassing-a-ruby-hash) – MZaragoza

+5

Хэши в рубине заказываются с 1,9, так что в чем смысл использования ActiveSupport :: OrderedHash? –

ответ

3

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

Смежные вопросы