Coldfusion 防止函数被定义两次

Coldfusion 防止函数被定义两次,coldfusion,coldfusion-9,Coldfusion,Coldfusion 9,我试图在模板中定义一个函数,但有时会调用两次模板。我试过了 <cfscript> if (not isdefined("tested")) { string function tested(required string component) output="false" { if (arguments.component CONTAINS "internal") return 'N/A'; .... </cfscript&

我试图在模板中定义一个函数,但有时会调用两次模板。我试过了

<cfscript>
if (not isdefined("tested"))    {

    string function tested(required string component) output="false"    {

        if (arguments.component CONTAINS "internal") return 'N/A';
    ....


 </cfscript>
但我还是得到了一份工作


我不相信你能做你想做的事


在代码中定义函数时,即使使用if/ELSE将其包围,运行时编译器仍将解析代码,以创建运行该函数所需的Java字节码。因此,关于代码组织,类/函数定义了两次。一个函数或组件背后的整个想法是,将其从过程或逻辑代码中移出,放入它自己的库或函数组中,这样就很容易重用。很抱歉带来了坏消息:

你必须这样做:

<cfscript>
if (!isdefined("tested")) {
    include "tested.cfm";
}
</cfscript>
然后将您的tested移动到tested.cfm

或者,如果您使用的是CF11,您可以尝试包含tested.cfm runonce=true


请参阅:

建议更好地组织代码以避免出现这种情况,这是一个很好的观点。独立的UDF到处浮动是糟糕设计的症状,同时对代码的控制不足也是导致这种情况的首要原因。Adam,你当然是对的,但是你需要一张笑脸,这样詹姆斯才知道你不会为此而对他感到不安:StackOverflow因为我在评论中使用了+1而斥责我,所以很惊讶他们会让我做一些如此轻率的事情,比如添加表情符号。詹姆斯已经知道我是什么样子了-真正地我从来没有用过plus-one,但我总是用smileys。我喜欢人们认为我微笑着,原谅了他们几乎所有的编码错误——这是出于你知道我是谁的恩典。事实上,我认为我就是从那里来的。