假设我必须解析一组分层标签
<tag>
<subtag1 attr1=value1 attr2=value2>
<subtag1 attr1=value1 attr2=value2>
<subtag1 attr1=value1 attr2=value2>
</tag>
为什么我不能在某些或任何内部使用break来超出级别层次结构?这样可以进行那种解析而不是头疼吗?
我问这个是因为我在这里阅读http://www.codeconscious.com/rebol/parse-tutorial.html它会创建一个无限循环
这种情况产生无限循环。因为BREAK属于SOME正在处理的规则的子规则。 BREAK不会影响成功/失败状态或输入指针 - 它只是提前退出规则:
规则到中断:[(打印“休息”)休息] == [(打印“休息”)休息] 解析“X”[某些[规则到破]“X”] 额 额 ... 额 额(逃逸)
答案 0 :(得分:2)
这在Rebol 2中给出了一个无限循环,你是对的。但请记住,parse
已根据用户的反馈在最新版本中进行了重大升级和修订。
所以在Rebol 3中,你得到:
>> rule-to-break: [(print "Break") break]
== [(print "Break") break]
>> parse "X" [some [rule-to-break] "X"]
Break
== true
卡尔写了一篇关于Rebol 3在R3博客上的突破行为的细微差别:
http://www.rebol.net/r3blogs/0277.html
Rebol 2在这一点上是一成不变的;修复它需要做多少工作是有限的。您应该在Rebol 3中测试所有示例。