我正在开发一个基于Railo4构建的应用程序,并且遇到了一个有趣的问题。就ColdFusion代码而言,我在这里没有做任何新的事情。只需要一些字符串,在需要的地方连接,然后返回一个字符串。
<cffunction name="customBuildURL" access="public" returntype="string">
<cfargument name="subsystem" type="string" required="true" />
<cfargument name="section" type="string" required="true" />
<cfargument name="item" type="string" required="true" />
<cfargument name="args" type="string" required="true" />
<cfset var url = "index.cfm?action=" & ARGUMENTS.subsystem & ":" & ARGUMENTS.section />
<cfif Ucase(ARGUMENTS.item) NEQ "DEFAULT" >
<cfset url &= "." & ARGUMENTS.item />
</cfif>
<cfif ARGUMENTS.args NEQ "" >
<cfset url &= ARGUMENTS.args />
</cfif>
<cfreturn url />
</cffunction>
但是,我遇到了两个不寻常的错误。
1)第一个是:Can't cast Complex Object Type Struct to String
,正在报告以下两行:
<cfset url &= "." & ARGUMENTS.item />
<cfset url &= ARGUMENTS.args />
2)返回the function customBuildURL has an invalid return value , can't cast Object type [url] to a value of type [string]
变量时,第二个是url
。
正如你所看到的,我在这里没有做任何详尽的事情。只需设置一些字符串,连接它们然后返回它。我没有看到正在创建“对象”的位置并将其转换为字符串。我仔细检查了&=
运算符的使用情况,这似乎不是问题,因为如果我执行了url = url & "." & ARGUMENTS.item
,则会报告相同的错误。
有什么想法吗?
答案 0 :(得分:4)
狡猾,
Railo不允许您将任何范围用作函数内部的变量。这是故意的不兼容性,因为Coldfusion确实允许这样做。但在这之后,您将无法再访问URL范围。这就是为什么我们不允许这样做。 例如,只需调用变量sUrl。
HTH
格特弗兰兹 Railo ltd。
答案 1 :(得分:3)
Url
是ColdFusion中的保留字,所以即使你在函数中对它进行变换,它仍然会获取url变量的实际结构。
以下是ColdFusion中reserved words的完整列表