coldfusion - 实体具有不正确的类型,可以作为函数调用

时间:2014-03-25 06:23:47

标签: coldfusion

我有一种情况,我在重构一些代码 - 我在循环中分离了很多代码并将其放入一个组件中,每个活动都是一个方法,所有这些都被称为w / ia循环。

当它运行时 - 第二次通过循环,它无法解析a.id - 在行" var b = b(i,a.id);"

如果我在每一行都执行writeOutput(),我会在循环开始和每一行看到我的val,直到最后一次。

    function a() {
        //do thing
        return id;
    }

    function b() {
        //do thing
        return id;
    }

    function bigOne() {
        for( var i=1; i<2; i++; ) {
            var a = a( i );
            var b = b( i, a.id );
        }
    }

我也尝过这个 - 同样的问题

function bigOne() {
    var a = '';
    var b = '';

    for( var i=1; i<2; i++; ) {
        a = a( i );
        b = b( i, a.id );
    }
}

我已经读过Coldfusion, The symbol you provided [method_name] is not a function了 - 但这不是一回事,这篇文章是关于吸气者和制定者......我不认为这适用于我的问题

如果我按照这样输出我的输出(&#39;请参阅&#39;它):

function bigOne() {
    var loopcount = 1;
    for( var i=1; i<2; i++; ) {
        writeOutput( 'loop count = ' & loopcount );
        var a = a( i );
        writeoutput( 'a.id = ' & a.id );
        var b = b( i, a.id );
    }
}

我明白了:

loop count = 1
a.id = 52978
loop count = 2 

然后错误。错误MSG:实体具有不正确的类型,可以作为函数调用。 您提供的符号insStop不是函数的名称。

2 个答案:

答案 0 :(得分:7)

函数由引用指向,就像变量一样,所以当你这样做时:

a = a();

您正在使用从其返回的值覆盖指向函数a的引用。因此,下次您尝试调用a()时,a ia不再是​​您的函数,它是上次调用它时返回的值。

如果您在某个变量行中出现错误而无法按照您希望的方式使用它... 将其转储并查看其中包含的内容。这通常会指出你正确做错的方向。

答案 1 :(得分:0)

为了支持Adam所说的内容,您可以通过在函数中定义变量来避免这种情况。默认情况下,未结合的变量放在&#34;变量&#34;范围,这适用于在同一模板中调用的函数。因此,您可以将其范围限定为&#34; local&#34;而不是命名您的函数var&#34; loopcount&#34;范围即

var local.loopcount = 1 

这将使函数var仅属于函数,因此不受函数外部发生的任何事件的影响,反之亦然。