当我的温度计使用这种模式离线时,我正在尝试识别:
Pattern "missing temps" (temp : &float ∈ any):
@temp is nil 5..;
它有效,但如果缺少超过5个值,我会为每个超过5的缺失值获得一个单独的匹配。
所以,如果我有:
50 50 nil nil nil nil nil nil nil 50 51
我得到3场比赛:
没有,没有,没有。 没有,没有,没有,没有。nil nil nil nil nil nil nil
如果温度计长时间处于脱机状态,通知将完全失控。它为什么这样做?如何停止冗余匹配?
答案 0 :(得分:1)
从Barrage的POV中,多次匹配并不是多余的;它通过重新启动每个值的模式匹配来做它应该做的事情。只是碰巧你的模式可以多次匹配同一系列的值。
但当然在这种情况下,这种行为并没有那么有用。这是一个简单的解决方法:
Pattern "missing temps" (temp : &float ∈ any):
@temp is nil 5.. [longest];
[longest]
告诉Barrage,一旦遇到最少连续五次 nil :
和
所以对你的例子来说:
50 50 nil nil nil nil nil nil nil 50 51
在最长可能的 nil 值之后,该步骤才会匹配:
nil nil nil nil nil nil nil
如果你有20个连续的 nil 值,那么该步骤将不会匹配,直到它重复了所有20个 nil 。
所以只需将[longest]
添加到步骤的末尾,您的模式应该按照您的意愿执行。