класс Prism::ClassVariableAndWriteNode
Представляет использование оператора ‘&&=` для присваивания классовой переменной.
@@target &&= value ^^^^^^^^^^^^^^^^^^
Атрибуты
attr_reader name: Symbol
attr_reader operator_loc: Location
attr_reader value: Node
Публичные Классовые Методы
# 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
# File lib/prism/node.rb, line 3460 def self.type :class_variable_and_write_node end
Аналогично type, этот метод возвращает символ, который вы можете использовать для разделения по типу узла, не выполняя длинную цепочку ===. Обратите внимание, что, как и type, он по-прежнему будет медленнее, чем использование == для одного класса, но должен быть быстрее в операторе case или сравнении массивов.
def self.type: () -> Symbol
Публичные Методы Экземпляров
# File lib/prism/node.rb, line 3382 def accept(visitor) visitor.visit_class_variable_and_write_node(self) end
def accept: (visitor: Visitor) -> void
# File lib/prism/node.rb, line 3387 def child_nodes [value] end
def child_nodes: () -> Array[nil | Node]
# File lib/prism/node.rb, line 3397 def comment_targets [name_loc, operator_loc, value] end
def comment_targets: () -> Array[Node | Location]
# File lib/prism/node.rb, line 3392 def compact_child_nodes [value] end
def compact_child_nodes: () -> Массив
# 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
# 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]
# 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
# File lib/prism/node.rb, line 3421 def operator operator_loc.slice end
def operator: () -> String
# 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.