在rebol中是否有一个与“continue”(python)等价的方法?

2024-09-30 10:38:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一些python代码转换为rebol,我刚刚遇到一个“continue”指令。它中断循环的处理,转到循环的下一个迭代。在

我觉得这个词很优雅,可读性很强。在

我在那里找到了一些答案:(用法语),但没有真正的“优雅”: http://pl.legoff.free.fr/dotclear/vf/index.php/post/2003/01/05/Equivalent-d-un-Continue-ou-Next-dans-une-bouc 由于这种转换已经有10年的历史了,也许Rebol从那以后做了一些改进?在


Tags: 答案代码freehttpindex指令frpl
3条回答

CONTINUE不在Rebol2中。但它在Rebol3中运行良好:

loop 2 [
    print {"This'll print", {HostileFork} said.}
    continue
    print {"This won't print", {HostileFork} said.}
]

您将得到输出:

"This'll print", {HostileFork} said.
"This'll print", {HostileFork} said.

据我所知,在Rebol2中没有办法实现continue。

好吧,根据@DocKimbel的回答,您可以在Rebol2中执行以下操作:

^{pr2}$

注意:BREAK-and-CONTINUE的内部实现方法使用了与THROW-in-Rebol相同的机制……这是相对轻量级的,不是异常处理。要知道,THROW是您应该用于错误处理的而不是,而现代的Rebol构建(Ren/C)甚至不允许抛出一个。你应该改用FAIL。在

您可以在Rebol2中使用异常:

continue: does [throw 'continue]

loop 2 [
    catch [
        print {"This'll print", {DocKimbel} said.}
        continue
        print {"This won't print", {DocKimbel} said.}
    ]
]

如果要在循环中处理自定义异常,可以使用/name细化,如catch/name[…]'continue来避免捕获其他异常。甚至可以重写迭代器以透明的方式为您实现这一点,但要付出一些较慢的性能代价。在

在R2循环1也可以工作,开销比CATCH少

loop 1 [
    print {"This'll print", {DocKimbel} said.}
    break
    print {"This won't print", {DocKimbel} said.}
    ]

相关问题 更多 >

    热门问题