class PatternMatch::PatternSetDeconstructor
Public Class Methods
new(klass, *subpatterns)
click to toggle source
Calls superclass method
PatternMatch::Pattern::new
# File lib/pattern-match/experimental.rb, line 134 def initialize(klass, *subpatterns) super(*subpatterns) @klass = klass end
Public Instance Methods
match(vals)
click to toggle source
Calls superclass method
PatternMatch::Pattern#match
# File lib/pattern-match/experimental.rb, line 139 def match(vals) super do |val| next false unless val.kind_of?(@klass) members = val.to_a next false unless subpatterns.length <= members.length members.permutation(subpatterns.length).find do |perm| cont = nil if callcc {|c| cont = c; perm.zip(subpatterns).all? {|i, pat| pat.match([i]) } } save_choice_point(cont) true else false end end end end