ColdFusion循环嵌套英镑符号问题

Fer*_*gus 1 coldfusion coldfusion-9

我试图评估两个动态分配的变量; 然后尝试根据结果分配动态变量.我有更长的代码,这是有效的,但我正在努力巩固.

以下是我对合并代码的看法:

<cfloop list="dog,cat,pig,horse" index="i">      
    <cfif (#trim([i]_FMCTotal)# /2) GT #trim([i]_FMC)#>
        <cfset #i#colorCode = 'red'>
    <cfelseif (#trim([i]_FMCTotal)# /1.5) GT #trim([i]_FMC)#>
        <cfset #i#colorCode = 'yellow'>
    <cfelse>
        <cfset #i#colorCode = 'green'>
    </cfif>  
</cfloop>
Run Code Online (Sandbox Code Playgroud)

Phi*_*ons 7

由于您有一些无效的CFML构造(例如,[i]_FMCTotal它不是有效的变量名称),因此您发布的代码中没有太多代码会通过解析器.在条件语句中也不需要使用哈希值,哈希值用于输出.

要回答这个问题,有evaluate()一个更具可读性,安全性和可维护性的解决方案是利用颜色代码的结构.

<cfset colorCodes = {}>
<!--- presuming ..._FMCTotal and .._FMC are reworked as structs also --->
<cfloop list="dog,cat,pig,horse" index="i">      
    <cfif (FMCTotal[i] /2) GT trim(FMC[i])>
        <cfset colorCode[i] = 'red'>
    <cfelseif (trim(FMCTotal[i] /1.5) GT trim(FMC[i])>
        <cfset colorCode[i] = 'yellow'>
    <cfelse>
        <cfset colorCode[i] = 'green'>
    </cfif>  
</cfloop>
Run Code Online (Sandbox Code Playgroud)

结果将是一个数据结构,您可以从中轻松访问后续代码中的任何项值

{ // possible result
    'pig': 'green'
  , 'cat': 'yellow'
  , 'dog': 'red'
  , 'horse': 'green'
}

colorCode['dog'] // => 'red'
Run Code Online (Sandbox Code Playgroud)

如果您无权重新编写_FMC变量,那么您可以对这些变量进行评估,evaluate('#i#_FMCTotal')但是对于这些变量使用集合也会更加清晰,就像在我的示例中一样.