class Prism::HashPatternNode
表示模式匹配中的哈希模式。
foo => { a: 1, b: 2 }
^^^^^^^^^^^^^^
foo => { a: 1, b: 2, **c }
^^^^^^^^^^^^^^^^^^^
foo => Bar[a: 1, b: 2]
^^^^^^^^^^^^^^^
foo in { a: 1, b: 2 }
^^^^^^^^^^^^^^
属性
表示模式匹配中的可选常量。
foo => Bar[a: 1, b: 2]
^^^
foo => Bar::Baz[a: 1, b: 2]
^^^^^^^^
表示显式的命名哈希键和值。
foo => { a: 1, b:, ** }
^^^^^^^^
表示哈希键和值的其余部分。这可以是命名的、未命名的,或者通过 **nil 显式禁止,后者会产生一个 NoKeywordsParameterNode。
foo => { a: 1, b:, **c }
^^^
foo => { a: 1, b:, ** }
^^
foo => { a: 1, b:, **nil }
^^^^^
Public Class Methods
Source
# File lib/prism/node.rb, line 8410 def initialize(source, node_id, location, flags, constant, elements, rest, opening_loc, closing_loc) @source = source @node_id = node_id @location = location @flags = flags @constant = constant @elements = elements @rest = rest @opening_loc = opening_loc @closing_loc = closing_loc end
初始化一个新的 HashPatternNode 节点。
Source
# File lib/prism/node.rb, line 8557 def self.type :hash_pattern_node end
返回此节点类型的符号表示。参见 Node::type。
Public Instance Methods
Source
# File lib/prism/node.rb, line 8563 def ===(other) other.is_a?(HashPatternNode) && (constant === other.constant) && (elements.length == other.elements.length) && elements.zip(other.elements).all? { |left, right| left === right } && (rest === other.rest) && (opening_loc.nil? == other.opening_loc.nil?) && (closing_loc.nil? == other.closing_loc.nil?) end
实现节点的相等性判断。这实际上是 ==,但不比较 location 的值。仅检查 location 是否存在。
Source
# File lib/prism/node.rb, line 8423 def accept(visitor) visitor.visit_hash_pattern_node(self) end
def accept: (Visitor visitor) -> void
Source
# File lib/prism/node.rb, line 8428 def child_nodes [constant, *elements, rest] end
def child_nodes: () -> Array
Source
# File lib/prism/node.rb, line 8542 def closing closing_loc&.slice end
def closing: () -> String?
Source
# File lib/prism/node.rb, line 8518 def closing_loc location = @closing_loc case location when nil nil when Location location else @closing_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end end
闭合花括号的位置。
foo => { a: 1 }
^
foo => Bar[a: 1]
^
Source
# File lib/prism/node.rb, line 8442 def comment_targets [*constant, *elements, *rest, *opening_loc, *closing_loc] #: Array[Prism::node | Location] end
def comment_targets: () -> Array[Node | Location]
Source
# File lib/prism/node.rb, line 8433 def compact_child_nodes compact = [] #: Array[Prism::node] compact << constant if constant compact.concat(elements) compact << rest if rest compact end
def compact_child_nodes: () -> Array
Source
# File lib/prism/node.rb, line 8447 def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, elements: self.elements, rest: self.rest, opening_loc: self.opening_loc, closing_loc: self.closing_loc) HashPatternNode.new(source, node_id, location, flags, constant, elements, rest, opening_loc, closing_loc) end
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantPathNode | ConstantReadNode | nil, ?elements: Array, ?rest: AssocSplatNode | NoKeywordsParameterNode | nil, ?opening_loc: Location?, ?closing_loc: Location?) -> HashPatternNode
Source
# File lib/prism/node.rb, line 8455 def deconstruct_keys(keys) { node_id: node_id, location: location, constant: constant, elements: elements, rest: rest, opening_loc: opening_loc, closing_loc: closing_loc } end
def deconstruct_keys: (Array keys) -> { node_id: Integer, location: Location, constant: ConstantPathNode | ConstantReadNode | nil, elements: Array, rest: AssocSplatNode | NoKeywordsParameterNode | nil, opening_loc: Location?, closing_loc: Location? }
Source
# File lib/prism/node.rb, line 8547 def inspect InspectVisitor.compose(self) end
def inspect -> String
Source
# File lib/prism/node.rb, line 8537 def opening opening_loc&.slice end
def opening: () -> String?
Source
# File lib/prism/node.rb, line 8493 def opening_loc location = @opening_loc case location when nil nil when Location location else @opening_loc = Location.new(source, location >> 32, location & 0xFFFFFFFF) end end
开合花括号的位置。
foo => { a: 1 }
^
foo => Bar[a: 1]
^
Source
# File lib/prism/node.rb, line 8532 def save_closing_loc(repository) repository.enter(node_id, :closing_loc) unless @closing_loc.nil? end
使用提供的已保存源来保存 closing_loc 位置,以便以后检索。
Source
# File lib/prism/node.rb, line 8507 def save_opening_loc(repository) repository.enter(node_id, :opening_loc) unless @opening_loc.nil? end
使用提供的已保存源来保存 opening_loc 位置,以便以后检索。