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