Это то, что я хочу создать, но это не работает:
class MyObject def self.[]=(key, value) @@internal_hash[key] = value end end
Я не понимаю, почему переопределение собственной точечной скобки не работает.
Вам нужно инициализировать переменную класса.
class MyObject @@internal_hash = {} def self.[]=(key, value) @@internal_hash[key] = value end end
Это по двум причинам.
Переменные экземпляра могут использоваться без инициализации, но переменные класса не могут. Программирование Ruby : переменные класса и методы класса: переменные класса: 1-й абзац
Даже если переменную класса можно было использовать без инициализации, она была бы неявно инициализирована на nil, и вы не можете внезапно использовать метод Hash#[].
nil
Hash#[]