我写了一个函数:
function getArtists(where='', artistactive = true){
//yadayada
return artists;
}
并将其包含在模板中 以下
之后<cfstoredproc datasource="#request.dsn#" procedure="GetArtists">
<cfprocresult name="GetArtists">
</cfstoredproc>
这会产生错误:
例程不能多次声明。例程getArtists有 已在不同的模板中声明两次
好的,问题1:ColdFusion认为函数和存储过程都是'例程'而且不能声明两次?
所以,我接下来要做的就是在存储过程之前包含我的函数模板 ...它似乎没问题。
问题2:给出了什么?
答案 0 :(得分:5)
你应该相信错误。在测试代码时,我在声明函数然后调用同名的存储过程时没有错误。当我使用<cfdump var="#variables#">
转出变量范围时,我仅查看结果集(而不是函数),因为该函数已被结果集覆盖。如果我在声明函数后尝试调用该函数然后覆盖它,我会得到"Incorrect entity type for being a function"
作为我的错误。
请记住,CF编译器会遍历您的代码并首先编译UDF和组件。它们不是在运行时编译的。您引用的错误发生在编译期间,而不是运行时。出于这个原因,我认为你的UDF例程实际上被包含在中的可能性不止一次。查看底部的调试信息并搜索该文件,看看是否是这种情况 - 或者检查自定义标记调用以及文件加倍的其他方法。
建议:作为一项规则,UDF应该在他们自己的空间中声明(onRequest()是它的一个好地方),应该保护它免受这种事情的影响。我使用像“lib”这样的变量并将我的函数(它们就像Java中的对象的成员一样)存储为lib.function1(),lib.function2()。你这样做会导致不可预测性。最后一点只是我的意见 - 试图提供帮助。 :)