Как определить метод класса, такой как MyObject [: test] = 'test' - PullRequest
0 голосов
/ 07 апреля 2011

Это то, что я хочу создать, но это не работает:

class MyObject
   def self.[]=(key, value)
     @@internal_hash[key] = value 
   end
end

Я не понимаю, почему переопределение собственной точечной скобки не работает.

1 Ответ

1 голос
/ 07 апреля 2011

Вам нужно инициализировать переменную класса.

class MyObject
  @@internal_hash = {}
  def self.[]=(key, value)
    @@internal_hash[key] = value 
  end
end

Это по двум причинам.

  1. Переменные экземпляра могут использоваться без инициализации, но переменные класса не могут. Программирование Ruby : переменные класса и методы класса: переменные класса: 1-й абзац

  2. Даже если переменную класса можно было использовать без инициализации, она была бы неявно инициализирована на nil, и вы не можете внезапно использовать метод Hash#[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...