模式是具有值和函数的散列。例如:
pattern = {a:1,b:2,c:function(x){ return x<5; }}
有一个函数可以检查对象是否与模式匹配。例如,如果 obj.a == 1、obj.b == 2 和 obj.c < 5,则对象将匹配上述模式。一些测试:
matches(pattern,{a:1,b:3,c:2}) == false // because b != 2
matches(pattern,{a:1,b:2,c:7}) == false // because c >= 5
matches(pattern,{a:1,b:2,c:3}) == true //fine
matches(pattern,{a:1,b:2,c:2,d:4}) == true //no problems in having extras
假设我有一组模式,我想找出一个对象是否与这些模式中的任何一个匹配。我可以一一检查,但是这样一来,我就有了 O(n) 复杂度,其中 n 是模式的数量。我有一种感觉,如果我使用这组模式来构建一些其他结构,这可以优化;但我不确定那个结构可能是什么。想法?