2013-05-16 6 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 버그? 언어 기능? 분명히 조건부가 참이라면 컴포넌트를 생성하기를 원합니다. 왜냐하면 후자는 약간의 낭비를 느끼기는하지만 작동합니다.

+0

흥미 롭군요 - 버그 같아요. –

+6

foobarbaz가 아닌 실제 코드 (인스턴스화중인 구성 요소의 init 메소드 포함)가 궁금합니다. –

+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'; 
    } 
    } 

을 처리하는 우아한 오류에 대한 몇 가지 구성 요소 반성 및 파일 존재 확인을 추가했다 할 수있다 문제를 찾는 데 도움이됩니다.

관련 문제