Spec-Zone.ru › Ruby 3.3

класс Prism::BreakNode

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

Представляет использование ключевого слова ‘break’.

break foo
^^^^^^^^^

Атрибуты

arguments[R]

attr_reader arguments: ArgumentsNode?

keyword_loc[R]

attr_reader keyword_loc: Location

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

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

def initialize: (arguments: ArgumentsNode?, keyword_loc: Location, location: Location) -> void

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

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

def self.type: () -> Symbol

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

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

def accept: (visitor: Visitor) -> void

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

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

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

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

compact_child_nodes() Показать исходный код
# File lib/prism/node.rb, line 1891
def compact_child_nodes
  compact = []
  compact << arguments if arguments
  compact
end

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

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

def copy: (**params) -> BreakNode

deconstruct()

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

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

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

inspect(inspector = NodeInspector.new) Показать исходный код
# File lib/prism/node.rb, line 1925
def inspect(inspector = NodeInspector.new)
  inspector << inspector.header(self)
  if (arguments = self.arguments).nil?
    inspector << "├── arguments: ∅\n"
  else
    inspector << "├── arguments:\n"
    inspector << arguments.inspect(inspector.child_inspector("│   ")).delete_prefix(inspector.prefix)
  end
  inspector << "└── keyword_loc: #{inspector.location(keyword_loc)}\n"
  inspector.to_str
end

def inspect(inspector: NodeInspector) -> String

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

def keyword: () -> String

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