gpt4 book ai didi

ColdFusion 10 不会抛出任何错误,但 ColdFusion 8 会

转载 作者:行者123 更新时间:2023-12-03 17:49:05 25 4
gpt4 key购买 nike

抱歉,这是我能想到的最好的标题。

我希望这里有人能给我解释一下这种行为。我的雇主刚刚决定将 CF 8 升级到 CF 10(是的,我知道)。但是,有些服务器在 CF 10 上,有些在 CF 8 上。我知道它不应该是这样的;但这不在我的控制范围内。无论如何,我有以下代码。它在 CF 8 中中断,但在 CF 10 中正常工作。在 CF 8 中,它表示元素 a 未在本地定义,这是预期的,我对此没有问题。毕竟,local 被声明了两次,而 a 没有在第二次定义。

但是在 CF 10 中,没有生成错误,函数返回了 local.a。对我来说,CF 10 应该抛出一个错误,因为与 CF 8 失败的原因相同,或者因为“本地”是 CF 10 中的保留字(“本地”是在 CF 9 中引入的)。为什么 CF 10 不会抛出任何错误?

<cfcomponent name="myComponent">
<cffunction name="myFunction" returntype="Numeric">
<cfscript>
var local = StructNew();
local.a = 1;
</cfscript>

<cfset local = StructNew()>

<cfif local.a is 0>
<!--- do something --->
</cfif>

<cfreturn local.a>
</cffunction>
</cfcomponent>

最佳答案

ColdFusion 9(以及相应的 10)在某种程度上违背了任何理智的人认为的常识,已被硬编码为忽略此声明:

local = structNew();

或者:

local = {};

这是为了向传统上使用 local 作为旧版本 CF 中的伪本地作用域的人们提供“向后兼容”。

不管你信不信,Adobe 是故意这样做的。

您可以通过在 cflive.net 上运行此代码来演示这一点:

function f(){
var local = {};

local.a = "set at top";

local = {};

writeDump(var=local);
}

f();

Railo,保佑他们,为了交叉兼容性,在这里遵循 ColdFusion 的领导。

Adobe 在这里做了一件非常愚蠢的事情,现在我们坚持使用它。但这就是为什么你看到你所看到的。

关于ColdFusion 10 不会抛出任何错误,但 ColdFusion 8 会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20566708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com