Переменные класса - PullRequest
       21

Переменные класса

0 голосов
/ 06 июня 2011

Объясните пожалуйста, я не могу понять.

class Foo
  @a = 123
  @@b = 123
end

Каковы преимущества переменных объектов-классов и переменных класса? Когда я должен использовать первый, а в каком второй?

Ответы [ 2 ]

4 голосов
/ 06 июня 2011

Область переменных уровня экземпляра, создаваемая заново для каждого экземпляра класса. Например, переменная @id, вероятно, должна быть уникальной для каждого экземпляра Foo. Однако могут быть некоторые значения, которые должны быть одинаковыми для каждого экземпляра типа. В этом случае переменная класса будет более подходящей.

Одним важным побочным эффектом переменных уровня класса является то, что они также являются общими для производных классов . Это означает, что изменение значения в подклассе 'Foo' изменит его также и для объектов 'Foo'. Это может быть то, что вы хотите, но может быть немного удивительно узнать трудный путь.

Например:

class Foo
  @@some_var = 1
  def bar
    puts(@@some_var)
  end
end

class Baz < Foo
  def perhaps_unexpected
    @@some_var = 10
    Foo.new.bar  #prints '10'
  end
end
1 голос
/ 06 июня 2011

Используйте переменную класса, когда вы хотите, чтобы все экземпляры класса совместно использовали эту переменную, и используйте переменную экземпляра, когда вы хотите, чтобы у каждого экземпляра была своя не разделяемая переменная.

...