Rinda::Template
class Rinda::Template
Parent:Rinda::Tuple
模板用于匹配Rinda中的元组。
公共实例方法
===(tuple) 显示源
匹配的别名。
# File lib/rinda/rinda.rb, line 169
def ===(tuple)
match(tuple)
end
匹配(元组)显示源
匹配此模板tuple
。该tuple
大小必须为模板相同。nil
在模板中具有值的元素充当通配符,匹配元组中相应位置中的任何值。tuple
如果是#==或=== ,则模板的元素匹配。
Template.new([:foo, 5]).match Tuple.new([:foo, 5]) # => true
Template.new([:foo, nil]).match Tuple.new([:foo, 5]) # => true
Template.new([String]).match Tuple.new(['hello']) # => true
Template.new([:foo]).match Tuple.new([:foo, 5]) # => false
Template.new([:foo, 6]).match Tuple.new([:foo, 5]) # => false
Template.new([:foo, nil]).match Tuple.new([:foo]) # => false
Template.new([:foo, 6]).match Tuple.new([:foo]) # => false
# File lib/rinda/rinda.rb, line 148
def match(tuple)
return false unless tuple.respond_to?(:size)
return false unless tuple.respond_to?(:fetch)
return false unless self.size == tuple.size
each do |k, v|
begin
it = tuple.fetch(k)
rescue
return false
end
next if v.nil?
next if v == it
next if v === it
return false
end
return true
end