Spec-Zone.ru › Crystal

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

Переменные класса связаны с классами, а не с экземплярами. Перед ними ставятся два знака «at» (@@). Например:

class Counter
  @@instances = 0

  def initialize
    @@instances += 1
  end

  def self.instances
    @@instances
  end
end

Counter.instances # => 0
Counter.new
Counter.new
Counter.new
Counter.instances # => 3

Переменные класса можно считывать и изменять из методов класса или методов экземпляра.

Их тип определяется с помощью алгоритма глобального вывода типов.

Переменные класса наследуются подклассами следующим образом: их тип остаётся тем же, но у каждого класса своё значение во время выполнения. Например:

class Parent
  @@numbers = [] of Int32

  def self.numbers
    @@numbers
  end
end

class Child < Parent
end

Parent.numbers # => []
Child.numbers  # => []

Parent.numbers << 1
Parent.numbers # => [1]
Child.numbers  # => []

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

To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/syntax_and_semantics/class_variables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API