我正在尝试评估两个动态分配的变量;然后尝试根据结果分配动态变量。 我有更长的代码,这是有效的,但我正在努力巩固。
以下是合并代码的内容:
<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>
答案 0 :(得分: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>
这样的结果将是一个数据结构,您可以从中轻松访问后续代码中的任何项目值
{ // possible result
'pig': 'green'
, 'cat': 'yellow'
, 'dog': 'red'
, 'horse': 'green'
}
colorCode['dog'] // => 'red'
如果您无权重写_FMC变量,您可以评估那些evaluate('#i#_FMCTotal')
,但是对于这些变量使用集合会更加清晰,就像在我的示例中一样。
答案 1 :(得分:1)
看看变量pig_FmcTotal除以2是否大于pig_FMC,那么你应该做类似的事情:
<cfif val(variables[i & '_FMCTotal']) / 2 gt val(variables[i & '_FMC'])>
我假设_FMC实际上是一个字符串,但如果它是一个变量,你将删除上面的单引号。使用括号表示法并在括号内连接键名称。还有其他方法可以做到这一点(例如评估)。
说到设置它是相同的例程:
<cfset variables[i & colorscheme] = 'green'/>
祝你好运。