在条件内实例化新的组件实例将是未定义的

时间:2013-05-16 15:12:35

标签: coldfusion coldfusion-9

以下代码将引发未定义的错误,“变量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错误?语言功能?显然,如果条件为真,我只想创建组件,所以虽然后者工作但感觉有点浪费。

1 个答案:

答案 0 :(得分: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';
    }
   }

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