使用IsDefined()的ColdFusion错误:参数必须是语法上有效的变量名

时间:2010-08-03 21:13:40

标签: coldfusion

在ColdFusion中,当我调用IsDefined("root.L1[1].L2")时,我收到以下错误:

  

函数IsDefined的参数1,现在是root.L1 [1] .L2,必须是语法上有效的变量名。

这是一个有效的变量名,所以给出了什么?

这是我的简化测试代码:

<cfscript>
  root = StructNew();
  root.L1 = ArrayNew(1);
  root.L1[1] = StructNew();
  root.L1[1].L2 = "foo";

  WriteOutput("root.L1[1].L2 is: #root.L1[1].L2#<br/>"); //no exception

  if(IsDefined("root.L1[1].L2")) //exception!
    WriteOutput("It is defined!");
  else
    WriteOutput("It is not defined!");
</cfscript>

2 个答案:

答案 0 :(得分:13)

尝试

StructKeyExists(root.L1[1],"L2")

而不是isDefined()

我模糊地回忆起isdefined()存在复杂变量的问题,但我不记得版本了。

答案 1 :(得分:0)

正如后续评论中所提到的,您应该将逻辑检查堆叠起来:

    if(arrayLen(root.L1) gte 1 AND structKeyExists(root.L1.[1],'L2')){ }

如果第一个参数失败,解析器将跳过第二个逻辑参数,因此如果第一个参数通过,你将不会在第二个逻辑参数上获得错误。