класс Rinda::Template
Шаблоны используются для сопоставления кортежей в Rinda.
Публичные методы экземпляров
# File lib/rinda/rinda.rb, line 171 def ===(tuple) match(tuple) end
Псевдоним для match.
# File lib/rinda/rinda.rb, line 150
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 Сопоставляет этот шаблон с 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
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.