我在表格中有一组列名称 – 例如foo1,foo2,foo3,foo4.我想通过循环动态引用这些列名:
<cfloop index="i" from="1" to="4"> <cfset foo = Evaluate("query.foo" & i)> </cfloop>
以上操作无效 – 即使query.foo1是对查询结果的有效引用,ColdFusion也会抛出“未定义的变量”错误.我怎么能这样做?
解决方法
不要对这样的事情使用Evaluate()!它很慢,should be avoided.
<cfloop index="i" from="1" to="4"> <cfset foo = query["foo" & i][query.CurrentRow]> </cfloop>
或者,如果你喜欢:
<cfloop index="i" from="1" to="4"> <cfset foo = query["foo#i#"][query.CurrentRow]> </cfloop>
Evaluate()用于评估代码位.不要将它用于可以通过语言集成,更合适的方式更优雅地解决的问题.
编辑:
使用“尖括号”-Syntax访问Query对象时,必须附加(从1开始的)行号索引(query [“foo#i#”] [RowNum]).使用传统的“dot”-Syntax(query.foo1)时,当前行是隐式的.
要显式访问当前行,请使用QueryObject.CurrentRow属性.但它可以是QueryObject.RecordCount之前的任何正整数.除了CurrentRow之外,建议进行范围检查.
这将打开一个有趣的领域:您可以开始使用“随机访问”查询对象.以前(在CFMX之前)你所能做的只是从头到尾迭代它们,拉出你要找的东西.现在它就像一个嵌套的结构/数组数据结构,您可以以不同的方式使用它.