класс Prism::InterpolatedXStringNode
Представляет строковый литерал xstring, содержащий интерполяцию.
`foo #{bar} baz`
^^^^^^^^^^^^^^^^ Атрибуты
attr_reader closing_loc: Location
attr_reader opening_loc: Location
attr_reader parts: Массив
Общедоступные методы класса
# File lib/prism/node.rb, line 10301 def initialize(opening_loc, parts, closing_loc, location) @opening_loc = opening_loc @parts = parts @closing_loc = closing_loc @location = location end
def initialize: (opening_loc: Location, parts: Массив, closing_loc: Location, location: Location) -> void
# File lib/prism/node.rb, line 10394 def self.type :interpolated_x_string_node end
Аналогично type, этот метод возвращает символ, который вы можете использовать для разделения по типу узла, не выполняя длинную цепочку ===. Обратите внимание, что, как и type, он по-прежнему будет медленнее, чем использование == для одного класса, но должен быть быстрее в операторе case или сравнении массивов.
def self.type: () -> Symbol
Общедоступные методы экземпляра
# File lib/prism/node.rb, line 10309 def accept(visitor) visitor.visit_interpolated_x_string_node(self) end
def accept: (visitor: Visitor) -> void
# File lib/prism/node.rb, line 10319 def child_nodes [*parts] end
def child_nodes: () -> Массив[nil | Node]
# File lib/prism/node.rb, line 10357 def closing closing_loc.slice end
def closing: () -> String
# File lib/prism/node.rb, line 10329 def comment_targets [opening_loc, *parts, closing_loc] end
def comment_targets: () -> Массив[Node | Location]
# File lib/prism/node.rb, line 10324 def compact_child_nodes [*parts] end
def compact_child_nodes: () -> Массив
# File lib/prism/node.rb, line 10334
def copy(**params)
InterpolatedXStringNode.new(
params.fetch(:opening_loc) { opening_loc },
params.fetch(:parts) { parts },
params.fetch(:closing_loc) { closing_loc },
params.fetch(:location) { location },
)
end def copy: (**params) -> InterpolatedXStringNode
# File lib/prism/node.rb, line 10347
def deconstruct_keys(keys)
{ opening_loc: opening_loc, parts: parts, closing_loc: closing_loc, location: location }
end def deconstruct_keys: (keys: Массив) -> Словарь[Символ, nil | Node | Массив | String | Token | Массив | Location]
# File lib/prism/node.rb, line 10362
def inspect(inspector = NodeInspector.new)
inspector << inspector.header(self)
inspector << "├── opening_loc: #{inspector.location(opening_loc)}\n"
inspector << "├── parts: #{inspector.list("#{inspector.prefix}│ ", parts)}"
inspector << "└── closing_loc: #{inspector.location(closing_loc)}\n"
inspector.to_str
end def inspect(inspector: NodeInspector) -> String
# File lib/prism/node.rb, line 10352 def opening opening_loc.slice end
def opening: () -> String
# File lib/prism/node.rb, line 10384 def type :interpolated_x_string_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.