Spec-Zone.ru › Ruby 3.3

класс Prism::InterpolatedXStringNode

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

Представляет строковый литерал xstring, содержащий интерполяцию.

`foo #{bar} baz`
^^^^^^^^^^^^^^^^

Атрибуты

closing_loc[R]

attr_reader closing_loc: Location

opening_loc[R]

attr_reader opening_loc: Location

parts[R]

attr_reader parts: Массив

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

new(opening_loc, parts, closing_loc, location) Показать исходный код
# 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

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

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

def self.type: () -> Symbol

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

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

def accept: (visitor: Visitor) -> void

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

def child_nodes: () -> Массив[nil | Node]

Также алиас: deconstruct
closing() Показать исходный код
# File lib/prism/node.rb, line 10357
def closing
  closing_loc.slice
end

def closing: () -> String

comment_targets() Показать исходный код
# File lib/prism/node.rb, line 10329
def comment_targets
  [opening_loc, *parts, closing_loc]
end

def comment_targets: () -> Массив[Node | Location]

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

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

copy(**params) Показать исходный код
# 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

deconstruct()

def deconstruct: () -> Массив[nil | Node]

Псевдоним для: child_nodes
deconstruct_keys(keys) Показать исходный код
# 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]

inspect(inspector = NodeInspector.new) Показать исходный код
# 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

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

def opening: () -> String

type() Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API