0

下面的代码会抛出一个未定义的错误,“Variable API is undefined”:

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

试图通过预定义变量来解决这个问题,发现它没有被重新分配,并且会抛出“Cannot invoke method find on an object of type of 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 错误?语言功能?显然,我只想在条件为真时创建组件,所以尽管后者有效,但感觉有点浪费。

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());

测试.cfc

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

查看您的实际代码可能有助于发现问题。

于 2013-05-16T17:36:43.957 回答