cfscript中IF块内的coldfusion continue关键字/奇怪的行为

Posted

技术标签:

【中文标题】cfscript中IF块内的coldfusion continue关键字/奇怪的行为【英文标题】:coldfusion continue keyword within IF block in cfscript / Odd behaviour 【发布时间】:2016-04-26 21:57:30 【问题描述】:

有没有人注意到“继续”一词的这种奇怪行为。在 If 语句中使用时,它似乎会杀死模板中的所有以下代码。

我在 CF 和 Lucee 中使用http://cflive.net/对此进行了测试

例如:

<cfscript>
    writeoutput('test1, loop<br>');
    for (x = 0; x > 5; x++) 
        writeoutput(' gonna continue?');
        continue;
        writeoutput('continued within');
    
    writeoutput('Out of loop..<br><br>');
    writeoutput('test2, if<br>');
    oURL = true;
    if (oURL) 
        writeoutput(' gonna continue?');
        continue; // seems to kill all following code
        writeoutput('continued within');
    
    writeoutput(' out of If..');
    writeoutput(' end');
    for (x = 0; x > 5; x++) 
        writeoutput('loop:' & x);
    
</cfscript>

【问题讨论】:

Continue 将中止循环内其余代码的处理。对我来说似乎工作正常。文档help.adobe.com/en_US/ColdFusion/9.0/Developing/… @Scp - FWIW,我确实看到了相同的结果,但是.. 很好奇,为什么在 if 语句中使用continue,而不是重组 if 块?通常 continue 被设计为使用循环。不确定在循环外使用时的预期行为是什么...... 我认为,使用continuebreak 外循环将像abort 一样工作,因为没有下一个循环可以去。 【参考方案1】:

我想如果在循环结构之外使用它会杀死所有以下代码。

cfcontinue 的想法是跳过执行命令之后的所有代码,并在循环顶部恢复处理。

我猜发生的情况是 cfml 引擎在到达 cfcontinue 命令后停止执行代码,并正在寻找它可以在哪里恢复处理,如果在循环之外这是未知的。

【讨论】:

(编辑)@SCP - 此外,如果您在 CFML 中尝试等效的 if 语句,CF 会抛出上下文验证错误“标签必须嵌套在 cfloop 标签内”。所以这听起来像真正的问题,或者如果你愿意的话,错误是 cfscript 没有警告该命令正在以非预期或不支持的方式使用。

以上是关于cfscript中IF块内的coldfusion continue关键字/奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中声明if块内的变量

如何在自定义 ColdFusion 日志文件中获得新行?

使用iText和ColdFusion创建PDF

简单的 ColdFusion 脚本在 IE 中有效,但在 Firefox 中无效?

我可以将文件写入linux目录,指定cfscript中的文件权限吗?

调用块内的块后的 BAD ACCESS (iOS)