你能在Coldfusion中一次变量范围多个变量吗?

时间:2011-04-21 15:37:42

标签: coldfusion coldfusion-9

虽然有可能并且不会抛出错误,但我想知道是否批准的做法是在一行中对多个变量进行变换,如下所示:

<cfset VAR var1 = var2 = var3 = ''>

我会感谢所有的想法和意见,特别是如果他们附带文件作为支持论点。我知道它可以正常工作而不会抛出错误但我找不到具体的文档说明它是否会扩展变量或者它是否只是声明了值。

谢谢!

5 个答案:

答案 0 :(得分:3)

FWIW,是的,您可以在CF9中执行此操作:

<cfset var a = var b = c = d*5>

这是the documentation给出的例子。在这种情况下,我假设变量cd已在函数的前面定义。

因此,您需要为每个变量重复var关键字,在您的情况下,这会导致:

<cfset VAR var1 = VAR var2 = VAR var3 = ''>

答案 1 :(得分:2)

正如大家所说,您需要使用varlocal来确定变量的范围。同样如@Ben所说,你不能像你一样拥有真正的范围变量。我建议使用本地范围并执行以下操作:

<cfscript>
     var val = 'some value'
     local = {
          var1 = duplicate(val),
          var2 = duplicate(val),
          var3 = duplicate(val)
      };
</cfscript>

在我看来,这是实现您似乎正在做的事情的最快方式。我只使用复制函数,如果你使用复数变量作为val(struct,array等)的值,你就不会遇到引用问题。

答案 2 :(得分:1)

<cfset>不限制变量。

要正确确定变量的范围,需要使用var关键字

<cfset var someVariable = 1>

否则将创建变量,但会将其分配给默认范围。 默认范围取决于上下文以及我们正在讨论的CF版本。

对于CFC方法:

  • CF9 - &gt; LOCAL范围
  • CF8 - &gt; VARIABLES范围

由于CF9中的范围规则,实际上并不需要var关键字。 变量可以随时直接添加到LOCAL范围(<cfset LOCAL.foo = "bar")。没有必要提前确定它们的范围。

答案 3 :(得分:1)

我想我应该首先指出你的代码不会变量变量,它只是设置它们的值。您需要使用VAR关键字(或CF9中的LOCAL范围)来指定变量应该是VAR范围。

此外,链接分配在所有版本的CF中都不起作用。我的工作场所仍在6.1,这会引发错误。

最后,如果我没记错,如果你使用如上所述的赋值语句,var1和var2等于true,因为如果没有错误发生,赋值操作的结果为真。 (有人纠正我,如果我错了,因为我不能在工作中测试它,因为我们在6.1)

无论如何,要回到你的问题,我不会链接任务或范围。首先,我认为个人作业更清晰。第二,它不适用于所有版本。所以我建议个人作业是首选。

答案 4 :(得分:0)

我见过人们只是创建一个var结构并将变量定义为结构的键。这样您就不必一直使用var。 E.g:

<cfset var local = structNew() />
<cfset local.var1 = "" />
<cfset local.var2 = "" />

这对于那些使用ColdFusion Server 8及更低版本并且使用var范围的人很有帮助。