Spec-Zone.ru › Ruby 3.3

class Prism::UndefNode

Parent:
Prism::Node

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

undef :foo, :bar, :baz
^^^^^^^^^^^^^^^^^^^^^^

Атрибуты

keyword_loc[R]

attr_reader keyword_loc: Location

names[R]

attr_reader names: Массив

Публичные методы класса

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

def initialize: (names: Массив, keyword_loc: Location, location: Location) -> void

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

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

def self.type: () -> Symbol

Публичные методы экземпляра

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

def accept: (visitor: Visitor) -> void

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

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

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

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

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

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

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

def copy: (**params) -> UndefNode

deconstruct()

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

Псевдоним для: child_nodes
deconstruct_keys(keys) Показать исходный код
# File lib/prism/node.rb, line 16418
def deconstruct_keys(keys)
  { names: names, 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 16428
def inspect(inspector = NodeInspector.new)
  inspector << inspector.header(self)
  inspector << "├── names: #{inspector.list("#{inspector.prefix}│   ", names)}"
  inspector << "└── keyword_loc: #{inspector.location(keyword_loc)}\n"
  inspector.to_str
end

def inspect(inspector: NodeInspector) -> String

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

def keyword: () -> String

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