我被困住了,请对此重新审视。

我正在与其他人的意大利面条式代码一起工作,这些代码不再存在,并且花费大量时间弄清楚他们正在评估什么。

<cfset surveyCount = 0>
<cfloop query="surveys">
    <cfif evaluate("defaultReport" & ID)>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
</cfloop>

在查询转储中,我看到了9条记录,这是我期望的,但是因为评估失败,所以SurveyCount并未增加。我没有看到defaultReport的任何列。在使用CF的15年中,我始终避免评估(),而现在当我需要对其进行分析时,我完全不知所措。有人可以提供任何指导吗?

添加了CFDump图像(出于隐私和安全考虑,已删除了某些列名称):
coldfusion - CF9 : What is this evaluate statement evaluating?-LMLPHP

更新一:
该文件具有大量的cfinclude语句和很少的代码格式。结果,我忽略了一些cfinclude语句。我发现了以下内容。我仍在寻找,但想在挖掘时记录下来。
<cfloop query="surveys"> <cfscript> variables["defaultReport" & ID] = evaluate(thisAssociation & "Price"); </cfscript></cfloop>
更新二:
转储变量作用域,我确实确认了我要查找的变量(也找到了我在UPDATE中发布的查询(我也提供了帮助))。 :)
coldfusion - CF9 : What is this evaluate statement evaluating?-LMLPHP

最佳答案

他们想要做的是增加surveyCount,但前提是这件事:evaluate("defaultReport" & ID)评估为true

从您的查询转储图片中,看起来ID是像144145等的数字...

在这种情况下,您可以将evaluate("defaultReport" & ID)视为defaultReport144defaultReport145等...(这些是在代码中某个位置设置的变量)。

所以代码:

<cfif evaluate("defaultReport" & ID)>
    <cfset surveyCount = surveyCount + 1>
</cfif>

变为(对于ID为144,您的查询循环中的第一个)
<cfif defaultReport144>
    <cfset surveyCount = surveyCount + 1>
</cfif>

以此类推...对于其他ID

因此,在代码中搜索defaultReport144defaultReport145等变量设置为true or false (0 or 1)的位置。

就像是:
<cfset defaultReport144 = true />
或者也许他们使用某种表达式,其结果为true或false,例如:
<cfset defaultReport144 = [some expression] />
如果找不到,则可能是在设置这些defaultReport...变量的地方更改或删除了代码。

ColdFusion evaluate()文档:
https://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f4e.html

关于coldfusion - CF9 : What is this evaluate statement evaluating?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48698444/

10-13 02:44