Spec-Zone.ru › Ruby 3.3

класс Prism::ImplicitNode

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

Представляет узел, который неявно добавляется в дерево, но не соответствует напрямую узлу в исходном коде.

{ foo: }
  ^^^^

{ Foo: }
  ^^^^

Атрибуты

value[R]

attr_reader value: Node

Публичные методы класса

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

def initialize: (value: Node, location: Location) -> void

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

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

def self.type: () -> Symbol

Публичные методы экземпляра

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

def accept: (visitor: Visitor) -> void

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

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

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

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

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

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

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

def copy: (**params) -> ImplicitNode

deconstruct()

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

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

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

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

def inspect(inspector: NodeInspector) -> String

type() Показать исходный код
# File lib/prism/node.rb, line 8022
def type
  :implicit_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