当我的温度计离线时,我正试图用这个模式来识别:
Pattern "missing temps" (temp : &float ∈ any):
@temp is nil 5..;它可以工作,但如果有超过5个值缺失,我得到一个单独的匹配,每一个缺失值超过5。
所以如果我有:
50 -0- 50 51
我得到了3支火柴:
零零 零零 零零
如果一个温度计离线很长时间,通知就会完全失控。它为什么要这么做?我怎么才能阻止多余的火柴?
发布于 2015-09-29 21:13:35
从Barrage的POV中,多个匹配并不是多余的;它通过在每个值上重新启动模式匹配来完成它应该做的事情。恰好,这里的模式可以多次匹配同一系列的值。
当然,在这种情况下,这种行为并没有多大帮助。不过,这是一个简单的解决办法:
Pattern "missing temps" (temp : &float ∈ any):
@temp is nil 5.. [longest];[longest]告诉Barrage,一旦遇到至少五个连续的_nil_s:
和
因此,对于你的例子:
50 -0- 50 51
该步骤将在可能最长的零值序列之后才匹配:
零零
如果您有20个连续的零值,那么直到它在所有的20个_nil_s上重复之后,这个步骤才会匹配。
因此,只需将[longest]添加到步骤的末尾,您的模式就应该做您想做的事情。
https://stackoverflow.com/questions/32852377
复制相似问题