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 型のオブジェクトでメソッド find を呼び出せません」がスローされます。

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

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

    return bar;
}

CF9.1のバグ?言語機能?明らかに、条件が真の場合にのみコンポーネントを作成したいので、後者は機能しますが、少し無駄に感じます。

4

1 に答える 1

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

実際のコードを確認すると、問題を見つけるのに役立つ場合があります。

于 2013-05-16T17:36:43.957 に答える