Когда и почему следует использовать классовые и глобальные переменные? - PullRequest
1 голос
/ 04 июля 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы знать, когда и почему следует использовать переменные класса (@@) и глобальные ($), и если в в этом случае те правильно используются.

П.С .: Я задаю этот вопрос, потому что у меня упомянутая проблема с регистром , и в ответе предлагается использовать переменную класса. Я благодарен, что вы можете объяснить мне, если в этом случае это полезно.

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Краткий ответ: никогда .

Я новичок в ruby, но я знаю это много по другим языкам: глобальные переменные никогда потокобезопасен.

В том же ключе избегайте одноэлементного шаблона, такого как чума, если только вы не имеете дело только с уникальной нитью.


Редактировать:

Кроме того, поиск в Google для инъекций зависимости от ruby ​​предполагает, что Ruby ничего не нужно.Ну, скажи что.Это так.

Поскольку всегда предполагалось, что это не так, есть горы драгоценных камней и библиотек, а чего нет.Они в основном предполагают, что у вас есть только один поток и блокировка ввода-вывода.Если бы они не сделали этого с самого начала, они могли бы быть потокобезопасными и неблокирующими.Но в настоящее время они просто нет.

И если бы они сделали это, они бы лучше играли с серверами, управляемыми событиями.

В сложившейся ситуации это кровавый беспорядок.

Event Machine не является поточно-ориентированным.Тонкий и Голиаф не одно и то же.Rack-async - это в основном обезьяна, исправляющая все это.Пассажир использует форк и работает только при установке REE / 1.8.7 с рельсами.Mongrel является потокобезопасным, но блокирует ввод-вывод.Webrick является однопоточным и блокирует ввод-вывод.Список можно продолжить.Это просто грязно.

0 голосов
/ 30 декабря 2011

Переменные класса могут использоваться для быстрой и грязной формы кэширования.

class Thing
  def expensiveCall
    unless @@expensiveResult
      @@expensiveResult = ['foo','bar','baz'] # or whatever
    end
    @@expensiveResult
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...