我被困住了,请对此重新审视。
我正在与其他人的意大利面条式代码一起工作,这些代码不再存在,并且花费大量时间弄清楚他们正在评估什么。
<cfset surveyCount = 0>
<cfloop query="surveys">
<cfif evaluate("defaultReport" & ID)>
<cfset surveyCount = surveyCount + 1>
</cfif>
</cfloop>
在查询转储中,我看到了9条记录,这是我期望的,但是因为评估失败,所以SurveyCount并未增加。我没有看到
defaultReport
的任何列。在使用CF的15年中,我始终避免评估(),而现在当我需要对其进行分析时,我完全不知所措。有人可以提供任何指导吗?添加了CFDump图像(出于隐私和安全考虑,已删除了某些列名称):
更新一:
该文件具有大量的cfinclude语句和很少的代码格式。结果,我忽略了一些cfinclude语句。我发现了以下内容。我仍在寻找,但想在挖掘时记录下来。
<cfloop query="surveys"> <cfscript> variables["defaultReport" & ID] = evaluate(thisAssociation & "Price"); </cfscript></cfloop>
更新二:
转储变量作用域,我确实确认了我要查找的变量(也找到了我在UPDATE中发布的查询(我也提供了帮助))。 :)
最佳答案
他们想要做的是增加surveyCount
,但前提是这件事:evaluate("defaultReport" & ID)
评估为true
。
从您的查询转储图片中,看起来ID是像144
,145
等的数字...
在这种情况下,您可以将evaluate("defaultReport" & ID)
视为defaultReport144
,defaultReport145
等...(这些是在代码中某个位置设置的变量)。
所以代码:
<cfif evaluate("defaultReport" & ID)>
<cfset surveyCount = surveyCount + 1>
</cfif>
变为(对于ID为144,您的查询循环中的第一个)
<cfif defaultReport144>
<cfset surveyCount = surveyCount + 1>
</cfif>
以此类推...对于其他ID
因此,在代码中搜索
defaultReport144
,defaultReport145
等变量设置为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/