函数和存储过程不能同名?



我写了一个函数:

function getArtists(where='', artistactive = true){
   //yadayada
   return artists;
}

并将其包含在模板中,在之后的

<cfstoredproc datasource="#request.dsn#" procedure="GetArtists">
    <cfprocresult name="GetArtists">
</cfstoredproc>

这会产生一个错误:

例程不能声明多次。常规的getArtists在不同的模板中声明了两次

好的,那么问题1:ColdFusion认为函数和存储过程都是"例程",不能声明两次?

所以,接下来我要做的是在存储过程之前包含我的函数模板…这似乎很好,有了它。

问题2:怎么了?

你应该相信这个错误。在测试你的代码,我得到没有错误时声明函数,然后调用同名的存储过程。当我使用<cfdump var="#variables#">转储变量范围时,I 只有看到结果集(而不是函数),因为函数已被结果集覆盖。如果我试图在声明函数后调用函数,然后重写它,我会得到"Incorrect entity type for being a function"作为我的错误。

请记住,CF编译器首先遍历您的代码并编译udf和组件。它们不会在运行时编译。您引用的错误发生在编译期间,而不是运行时。出于这个原因,我认为更有可能的是您的UDF例程实际上不止一次被包含在中。查看底部的调试信息并搜索该文件,看看情况是否如此—或者检查自定义标记调用和其他文件翻倍的方法。

建议:作为一个规则,UDF应该在自己的空间中声明(onRequest()是一个很好的地方),并且应该避免这种事情。我使用像"lib"这样的变量,并将函数(就像在Java中一样是对象的成员)存储为lib.function1(), lib.function2()。你做事的方式会导致不可预测性。最后这只是我的意见——试图帮助。:)

最新更新