2013-05-16 16 views
0

下面的代碼會拋出一個未定義的錯誤,「變量API未定義」:實例化的內部條件的新組件實例將是不確定的

public string function foo() { 
    var bar = ""; 

    if (somecondition) { 
     var api = new some.path.to.component(); 
     bar = api.baz(); 
    } 

    return bar; 
} 

雖然下面將正常工作:

public string function foo() { 
    var bar = ""; 
    var api = new some.path.to.component(); 

    if (somecondition) { 
     bar = api.baz(); 
    } 

    return bar; 
} 

試圖通過預定義該變量解決它顯示它不會被重新分配,並會拋出「無法在java.lang.String類型的對象上調用方法查找」:

public string function foo() { 
    var bar = ""; 
    var api = ""; 

    if (somecondition) { 
     api = new some.path.to.component(); 
     bar = api.baz(); 
    } 

    return bar; 
} 

CF9.1 bug?語言功能?顯然,我只想創建組件,如果條件爲真,所以儘管後者起作用,但感覺有點浪費。

+0

有趣 - 聽起來像一個bug –

+6

我很想看到實際的代碼(包括你正在實例化的組件的init方法),而不是foobarbaz的東西。 –

+0

- > https://bugbase.adobe.com/pls,thx – Henry

回答

3

僅供參考:我在Coldfusion 9中測試了這個,我沒有收到錯誤。我沒有加入一些成分反省和文件存在確認的優雅錯誤處理

網頁腳本

somecondition = true; 
public string function foo() { 
    var bar = "unassigned"; 
    if (somecondition) { 
     if(fileexists('/webroot/jquery/stackoverflow/test.cfc')){ 
      var api = new webroot.jquery.stackoverflow.test(); 
      var meta = GetMetaData(api); 
      if(IsStruct(meta)){ 
       bar = api.test(); 
      } 
     } 
    } 
    return bar; 
} 
WriteDump(var=foo()); 

test.cfc

component displayname="test" output="false" { 
    public string function test(){ 
     return 'foo test'; 
    } 
    } 

看到您的實際代碼可能協助找出問題。