Coldfusion语法 - 如何使用Evaluate

时间:2011-10-21 17:33:29

标签: coldfusion evaluate

我正在尝试确定是否定义了具有变量名称的变量。请帮助我的语法...到目前为止我的尝试:

<cfif isDefined(Evaluate("session['#url.sessionSQL#']['SQL_ALL']"))>

<cfif isDefined('Evaluate("session[#url.sessionSQL#]")["SQL_ALL"]')>

<cfif isDefined(Evaluate("session['#url.sessionSQL#']['SQL_ALL']"))>        

<cfif isDefined('session[Evaluate("#url.sessionSQL#")]["SQL_ALL"]')>

<cfif isDefined('session["#url.sessionSQL#"]["SQL_ALL"]')>

感谢。

4 个答案:

答案 0 :(得分:5)

你的问题有点令人困惑;)

如果session [url.sessionSQL] ['SQL_ALL']包含变量的 name ,则可以使用structKeyExists验证该变量是否存在于特定范围内。

<cfif structKeyExists(scopeToCheck, "TestForThisVariableName")>  
... ie
<cfif structKeyExists(variables, session[url.sessionSQL].SQL_ALL)>

另一方面,如果只想验证那些会话变量是否存在

  <cfif structKeyExists(session, url.sessionSQL) AND 
        structKeyExists(session[url.sessionSQL], "SQL_ALL")>

无论哪种方式,您都不需要evaluate()函数。

更新:根据评论,IsDefinedStructKeyExists之间的主要区别为precision。 IsDefined在确定变量是否存在时检查a whole list of scopes。通常(尽管不总是)这是不合需要的,因为如果您忘记了多个范围中存在的特定变量,它可能会导致意外结果。 (在函数内部使用IsDefined是一个很好的例子。)当您特别想要检查多个范围时,IsDefined()更合适。否则,我会坚持StructKeyExists,因为它的结果不那么模糊。

答案 1 :(得分:0)

<cfif isDefined("#session[url.sessionSQL].SQL_ALL#")>

<强>更新

假设您要检查的变量的名称存储在session[url.sessionSQL].SQL_ALL中,但可能尚未在urlsessionSQL_ALL <中定义这些部分/ p>

然后是最安全的版本:

<cfif isDefined("url.sessionSQL") 
      and isDefined("session[url.sessionSQL]")
      and isDefined("session[url.sessionSQL].SQL_ALL")
      and isDefined("#session[url.sessionSQL].SQL_ALL#")>

答案 2 :(得分:0)

即使Henry的答案最好,我也会指出上面的语法问题。

您希望将isDefined()内部的字符串计算为字符串,但它是引号(当然,isDefined()当然是必需的,因为它需要变量的名称,而不是实际的变量。所以你需要要使evaluate()在引号内运行的哈希标记。

<cfif isDefined('#Evaluate("session[url.sessionSQL]")#["SQL_ALL"]')>

否则它正在寻找一个名为“session [#url.sessionSQL#]”的变量。)[“SQL_ALL”]“

我实际上没有对此进行测试,但我相信这应该可行。但显然,另一种方式更好。

答案 3 :(得分:0)

编辑:

事实证明,Leigh上面的回答很好,但不是Henry的。在此期间,我找到了自己的解决方案,如下所示。

在原始问题中,我有一个结构

"#session#"

有一个由变量

引用的元素
"#url.sessionSQL#"

换句话说,

"#session[sessionSQL]#" 

我试图找出该元素是否定义了structKey,名为“SQL_ALL”。我能够让事情像这样工作:

<cfset sessionSQL = #session[url.sessionSQL]# />
<cfif structKeyExists(sessionSQL, "SQL_ALL")>