класс Prism::ImaginaryNode
Представляет литерал мнимой части числа.
1.0i ^^^^
Атрибуты
attr_reader numeric: Node
Общедоступные методы класса
# File lib/prism/node.rb, line 7941 def self.type :imaginary_node end
Аналогично type, этот метод возвращает символ, который вы можете использовать для разделения по типу узла, не прибегая к длинной цепочке ===. Обратите внимание, что, как и в type, он по-прежнему будет медленнее, чем использование == для одного класса, но должен быть быстрее в операторе case или сравнении массивов.
def self.type: () -> Symbol
Общедоступные методы экземпляров
# File lib/prism/node.rb, line 7874 def accept(visitor) visitor.visit_imaginary_node(self) end
def accept: (visitor: Visitor) -> void
# File lib/prism/node.rb, line 7879 def child_nodes [numeric] end
def child_nodes: () -> Array[nil | Node]
# File lib/prism/node.rb, line 7889 def comment_targets [numeric] end
def comment_targets: () -> Array[Node | Location]
# File lib/prism/node.rb, line 7884 def compact_child_nodes [numeric] end
def compact_child_nodes: () -> Массив
# File lib/prism/node.rb, line 7894
def copy(**params)
ImaginaryNode.new(
params.fetch(:numeric) { numeric },
params.fetch(:location) { location },
)
end def copy: (**params) -> ImaginaryNode
# File lib/prism/node.rb, line 7905
def deconstruct_keys(keys)
{ numeric: numeric, location: location }
end def deconstruct_keys: (keys: Массив) -> Словарь[Символ, nil | Node | Массив | String | Token | Массив | Location]
# File lib/prism/node.rb, line 7910 def inspect(inspector = NodeInspector.new) inspector << inspector.header(self) inspector << "└── numeric:\n" inspector << inspector.child_node(numeric, " ") inspector.to_str end
def inspect(inspector: NodeInspector) -> String
# File lib/prism/node.rb, line 7931 def type :imaginary_node end
Иногда вам нужно проверить экземпляр узла по списку классов, чтобы определить, какое поведение выполнить. Обычно это делается путем вызова `[cls1, cls2].include?(node.class)` или размещения узла в операторе case и выполнения `case node; when cls1; when cls2; end`. Оба этих подхода относительно медленные из-за постоянных поисков, вызовов методов и/или выделения массивов.
Вместо этого вы можете вызвать type, который вернет символ, который вы можете использовать для сравнения. Это быстрее, чем другие подходы, потому что он использует одно сравнение целых чисел, а также потому, что в CRuby вы можете воспользоваться тем фактом, что операторы case со всеми символами-ключами будут использовать таблицу переходов.
def type: () -> Symbol
# File lib/prism/node_ext.rb, line 69 def value Complex(0, numeric.value) end
Возвращает значение узла в виде Ruby Complex.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.