класс Prism::BreakNode
Представляет использование ключевого слова ‘break’.
break foo ^^^^^^^^^
Атрибуты
attr_reader arguments: ArgumentsNode?
attr_reader 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
# File lib/prism/node.rb, line 1961 def self.type :break_node end
Аналогично type, этот метод возвращает символ, который вы можете использовать для разделения по типу узла, не выполняя длинную цепочку ===. Обратите внимание, что, как и type, он по-прежнему будет медленнее, чем использование == для одного класса, но должен быть быстрее в операторе case или сравнении массивов.
def self.type: () -> Symbol
Общедоступные методы экземпляра
# File lib/prism/node.rb, line 1881 def accept(visitor) visitor.visit_break_node(self) end
def accept: (visitor: Visitor) -> void
# File lib/prism/node.rb, line 1886 def child_nodes [arguments] end
def child_nodes: () -> Array[nil | Node]
# File lib/prism/node.rb, line 1898 def comment_targets [*arguments, keyword_loc] end
def comment_targets: () -> Array[Node | Location]
# File lib/prism/node.rb, line 1891 def compact_child_nodes compact = [] compact << arguments if arguments compact end
def compact_child_nodes: () -> Массив
# 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
# 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]
# 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
# File lib/prism/node.rb, line 1920 def keyword keyword_loc.slice end
def keyword: () -> String
# 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.