首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coldfusion语法-如何使用Evaluate

Coldfusion语法-如何使用Evaluate
EN

Stack Overflow用户
提问于 2011-10-22 01:33:29
回答 4查看 4.1K关注 0票数 3

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

代码语言:javascript
复制
<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"]')>

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-22 01:57:58

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

如果sessionurl.sessionSQL包含变量的名称,则可以使用structKeyExists来验证变量是否存在于特定范围内。

代码语言:javascript
复制
<cfif structKeyExists(scopeToCheck, "TestForThisVariableName")>  
... ie
<cfif structKeyExists(variables, session[url.sessionSQL].SQL_ALL)>

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

代码语言:javascript
复制
  <cfif structKeyExists(session, url.sessionSQL) AND 
        structKeyExists(session[url.sessionSQL], "SQL_ALL")>

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

更新:从评论来看,IsDefinedStructKeyExists之间的一个关键区别是precision。当确定变量是否存在时,IsDefined会检查a whole list of scopes。通常(但并非总是)这是不可取的,因为如果您忘记了某个特定变量存在于多个作用域中,则可能会导致意外的结果。(在函数中使用IsDefined就是一个很好的例子。)当您特别想检查多个作用域时,IsDefined()更合适。否则,我会坚持使用StructKeyExists,因为它的结果比较明确。

票数 6
EN

Stack Overflow用户

发布于 2011-10-22 01:40:27

代码语言:javascript
复制
<cfif isDefined("#session[url.sessionSQL].SQL_ALL#")>

更新

假设您要检查的变量的名称存储在session[url.sessionSQL].SQL_ALL中,但是这些部分可能没有在urlsessionSQL_ALL中定义

然后是最安全的版本:

代码语言:javascript
复制
<cfif isDefined("url.sessionSQL") 
      and isDefined("session[url.sessionSQL]")
      and isDefined("session[url.sessionSQL].SQL_ALL")
      and isDefined("#session[url.sessionSQL].SQL_ALL#")>
票数 0
EN

Stack Overflow用户

发布于 2011-10-22 01:57:47

尽管下面来自Henry的答案是最好的,我还是会指出上面语法的问题。

您希望将isDefined()中的字符串计算为字符串,但它包含在引号中(这对于isDefined()当然是必需的,因为它需要变量的名称,而不是实际的变量)。因此,您需要使用散列标记来在引号内运行evaluate()。

代码语言:javascript
复制
<cfif isDefined('#Evaluate("session[url.sessionSQL]")#["SQL_ALL"]')>

否则,它将查找名为“session#url.sessionSQL#”)“SQL_ALL”的变量

我实际上并没有测试这个,但我相信这应该是可行的。但显然,另一种方式要好得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7853080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档