Spec-Zone.ru › Ruby 3.3

класс Prism::ClassVariableAndWriteNode

Родитель:
Prism::Node

Представляет использование оператора ‘&&=` для присваивания классовой переменной.

@@target &&= value
^^^^^^^^^^^^^^^^^^

Атрибуты

name[R]

attr_reader name: Symbol

name_loc[R]

attr_reader name_loc: Location

operator_loc[R]

attr_reader operator_loc: Location

value[R]

attr_reader value: Node

Публичные Классовые Методы

new(name, name_loc, operator_loc, value, location) Показать исходный код
# File lib/prism/node.rb, line 3373
def initialize(name, name_loc, operator_loc, value, location)
  @name = name
  @name_loc = name_loc
  @operator_loc = operator_loc
  @value = value
  @location = location
end

def initialize: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> void

type() Показать исходный код
# File lib/prism/node.rb, line 3460
def self.type
  :class_variable_and_write_node
end

Аналогично type, этот метод возвращает символ, который вы можете использовать для разделения по типу узла, не выполняя длинную цепочку ===. Обратите внимание, что, как и type, он по-прежнему будет медленнее, чем использование == для одного класса, но должен быть быстрее в операторе case или сравнении массивов.

def self.type: () -> Symbol

Публичные Методы Экземпляров

accept(visitor) Показать исходный код
# File lib/prism/node.rb, line 3382
def accept(visitor)
  visitor.visit_class_variable_and_write_node(self)
end

def accept: (visitor: Visitor) -> void

child_nodes() Показать исходный код
# File lib/prism/node.rb, line 3387
def child_nodes
  [value]
end

def child_nodes: () -> Array[nil | Node]

Также алиасирован как: deconstruct
comment_targets() Показать исходный код
# File lib/prism/node.rb, line 3397
def comment_targets
  [name_loc, operator_loc, value]
end

def comment_targets: () -> Array[Node | Location]

compact_child_nodes() Показать исходный код
# File lib/prism/node.rb, line 3392
def compact_child_nodes
  [value]
end

def compact_child_nodes: () -> Массив

copy(**params) Показать исходный код
# File lib/prism/node.rb, line 3402
def copy(**params)
  ClassVariableAndWriteNode.new(
    params.fetch(:name) { name },
    params.fetch(:name_loc) { name_loc },
    params.fetch(:operator_loc) { operator_loc },
    params.fetch(:value) { value },
    params.fetch(:location) { location },
  )
end

def copy: (**params) -> ClassVariableAndWriteNode

deconstruct()

def deconstruct: () -> Array[nil | Node]

Псевдоним для: child_nodes
deconstruct_keys(keys) Показать исходный код
# File lib/prism/node.rb, line 3416
def deconstruct_keys(keys)
  { name: name, name_loc: name_loc, operator_loc: operator_loc, value: value, location: location }
end

def deconstruct_keys: (keys: Массив) -> Словарь[Символ, nil | Node | Массив | String | Token | Массив | Location]

inspect(inspector = NodeInspector.new) Показать исходный код
# File lib/prism/node.rb, line 3426
def inspect(inspector = NodeInspector.new)
  inspector << inspector.header(self)
  inspector << "├── name: #{name.inspect}\n"
  inspector << "├── name_loc: #{inspector.location(name_loc)}\n"
  inspector << "├── operator_loc: #{inspector.location(operator_loc)}\n"
  inspector << "└── value:\n"
  inspector << inspector.child_node(value, "    ")
  inspector.to_str
end

def inspect(inspector: NodeInspector) -> String

operator() Показать исходный код
# File lib/prism/node.rb, line 3421
def operator
  operator_loc.slice
end

def operator: () -> String

type() Показать исходный код
# File lib/prism/node.rb, line 3450
def type
  :class_variable_and_write_node
end

Иногда вам нужно проверить экземпляр узла против списка классов, чтобы увидеть, какое поведение выполнить. Обычно это делается путем вызова ‘[cls1, cls2].include?(node.class)` или размещения узла в операторе case и выполнения `case node; when cls1; when cls2; end`. Оба этих подхода относительно медленные из-за постоянных поисков, вызовов методов и/или выделений массивов.

Вместо этого вы можете вызвать type, который вернет вам символ, который вы можете использовать для сравнения. Это быстрее, чем другие подходы, потому что использует одно сравнение целых чисел, а также потому, что если вы используете CRuby, вы можете воспользоваться тем фактом, что операторы case со всеми символами-ключами будут использовать таблицу переходов.

def type: () -> Symbol

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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