2011-04-21 109 views
4

雖然這是可能的,如果它是經過批准的做法VAR範圍多個變量在這樣一行不拋出一個錯誤,我想知道:你可以在Coldfusion中一次性定義多個變量嗎?

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

我想感謝所有的想法和意見,特別是如果他們以文檔作爲支持論點。我知道它的工作原理沒有拋出一個錯誤,但我找不到具體的文檔,說明它是否會限定一個變量或者它是否聲明瞭值。

謝謝!

+2

BTW:一個簡單的方法來測試它是轉儲功能局部範圍:CF9 /'#本地#'CF8 /'#getPageContext()。getActiveFunctionLocalScope()#' – Leigh 2011-04-21 17:43:31

回答

2

大家都說你需要用varlocal來確定變量的範圍。還有@Ben說,你不能像你一樣真正變量範圍變量。我的建議是使用本地範圍,這樣做如下:

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

也就是說,在我看來,是實現你彷彿在做的最快方法。我使用重複函數,所以如果你使用一個複雜的變量作爲val(struct,array等)的值,你不會遇到引用問題。

1

<cfset>沒有範圍變量。

要正確範圍變量需要var關鍵字

<cfset var someVariable = 1>

否則,變量將被創建,但分配給默認範圍。 默認範圍取決於上下文以及我們正在討論的CF版本。

對於CFC方法:

  • CF9 - >LOCAL範圍
  • CF8 - >VARIABLES範圍

由於CF9作用域規則是不是真的需要的var關鍵字。 變量可以直接在任何時候添加到LOCAL範圍內(<cfset LOCAL.foo = "bar")。沒有必要提前確定它們的範圍。

1

我想我應該首先指出你的代碼不會變量範圍的變量,它只是設置它們的值。您需要使用VAR關鍵字(或CF9中的LOCAL作用域)來指定變量應爲VAR作用域。

此外,鏈接分配不適用於所有版本的CF.我的工作場所仍然在6.1,並且這引發了一個錯誤。

最後,如果我記得沒錯,如果使用上面的賦值語句,那麼var1和var2等於true,因爲如果沒有發生錯誤,賦值操作的結果爲true。 (有人糾正我,如果我錯了,因爲我無法在工作中測試它,因爲我們在6.1)

無論如何,回到你的問題,我不鏈接任務或範圍確定。首先,我認爲個人任務更清晰。其次,它不適用於所有版本。所以我建議個人的任務將是首選。

+0

我不喜歡鏈接,但用CF9快速測試顯示所有變量都等於一個空字符串。然而'var2'和'var3'被放置在共享的'variables'範圍內(不是本地函數)。 – Leigh 2011-04-21 17:33:03

0

我見過人們簡單地創建一個var結構體,並將這些變量定義爲結構體的鍵。這樣你就不必一直使用var了。例如:

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

這對於那些使用ColdFusion Server 8及以下版本並且與var scope保持一致的用戶很有幫助。

3

FWIW,是的,你可以在CF9做到這一點:

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

這裏是the documentation它給出了例子。在這種情況下,我假設變量cd已經在函數的前面定義過了。

所以,你需要重複var關鍵字每個變量,並在你的情況,這將導致:

<cfset VAR var1 = VAR var2 = VAR var3 = ''> 
相關問題