3

我正在开发一个基于 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,则会报告相同的错误。

有任何想法吗?

4

2 回答 2

4

狡猾,

Railo 不允许您将任何范围用作函数内部的变量。这是故意的不兼容,因为 Coldfusion 确实允许这样做。但这样做之后,您将无法再访问 URL 范围。这就是为什么我们不允许这样做。例如,只需调用变量 sUrl。

高温高压

格特·弗朗茨·莱洛有限公司

于 2013-07-20T12:28:29.813 回答
3

Url是 ColdFusion 中的保留字,因此即使您在函数中对其进行了 var-ing,它仍然会获取 url 变量的实际结构。

这是ColdFusion中保留字的完整列表

于 2013-07-20T03:33:21.020 回答