Coldfusion语法 - 如何使用Evaluate

ear*_*efl 2 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"]')>
Run Code Online (Sandbox Code Playgroud)

谢谢.

Lei*_*igh 5

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

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

<cfif structKeyExists(scopeToCheck, "TestForThisVariableName")>  
... ie
<cfif structKeyExists(variables, session[url.sessionSQL].SQL_ALL)>
Run Code Online (Sandbox Code Playgroud)

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

  <cfif structKeyExists(session, url.sessionSQL) AND 
        structKeyExists(session[url.sessionSQL], "SQL_ALL")>
Run Code Online (Sandbox Code Playgroud)

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

更新:从评论中,IsDefined和之间的关键区别StructKeyExists精确度.IsDefined 在确定变量是否存在时检查整个范围列表.通常(尽管不总是)这是不合需要的,因为如果您忘记了多个范围中存在的特定变量,它可能会导致意外结果.(IsDefined在函数内部使用是一个很好的例子.)当你特别想要检查多个范围时,那么IsDefined()更合适.否则,我会坚持,StructKeyExists因为它的结果不那么模糊.