Spec-Zone.ru › Ruby 3.3

класс Prism::ProgramNode

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

Узел верхнего уровня любого дерева разбора.

Атрибуты

locals[R]

attr_reader locals: Массив

statements[R]

attr_reader statements: StatementsNode

Общедоступные методы класса

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

def initialize: (locals: Массив, statements: StatementsNode, location: Location) -> void

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

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

def self.type: () -> Symbol

Общедоступные методы экземпляра

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

def accept: (visitor: Visitor) -> void

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

def child_nodes: () -> Массив[nil | Узел]

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

def comment_targets: () -> Массив[Узел | Расположение]

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

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

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

def copy: (**params) -> ProgramNode

deconstruct()

def deconstruct: () -> Массив[nil | Узел]

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

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

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

def inspect(inspector: NodeInspector) -> String

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