2013-07-20 65 views
3

我正在構建一個基於Railo4的應用程序,並且遇到了一個有趣的問題。就ColdFusion代碼而言,我在這裏沒有做任何新的事情。只需要一些字符串,在需要的地方連接起來,然後返回一個字符串。Railo4字符串串聯問題

<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)第二個是在所述url變量的返回the function customBuildURL has an invalid return value , can't cast Object type [url] to a value of type [string]

正如你所看到的,我在這裏沒有做任何詳細說明。只需設置一些字符串,連接它們然後返回。我沒有看到'Object'正在被創建並被投射爲一個字符串。我再次檢查了&=操作符的使用情況,這看起來不是問題,因爲如果我執行url = url & "." & ARGUMENTS.item,則會報告相同的錯誤。

任何想法?

+1

如果使用url以外的變量會發生什麼?我假設它仍在拉動url結構 –

+0

修復了它!我希望你能發佈這個答案,我可以給你信任。我盯着這幾個小時,但沒有意識到我犯了一個新錯誤。 URL範圍與我的變量衝突! D'OH!無論如何,將'url'變量改爲'actionURL',現在一切正常!謝謝馬特!當你盯着它太長時間時,有時候需要額外的眼睛。 –

+0

沒問題。我發佈了這個答案。 –

回答

3

Url是ColdFusion中的一個保留字,所以即使您在函數中對它進行了變量,它仍然會獲取url變量的實際結構。

這裏是reserved words ColdFusion的

+0

Railo中的保留字是否與ACF相同?而不是'var url'在函數內被使用 –

4

狡猾,

Railo不允許你使用任何範圍內作爲功能變量的完整列表。這是故意的不兼容性,因爲Coldfusion確實允許這樣做。但做完這些之後,您將無法再訪問URL範圍。這就是我們不允許的原因。 只需調用變量sUrl即可。

HTH

格特弗朗茨 Railo有限公司。

+1

只是旁白:Gert是Railo的首席執行官(http://www.getrailo.com/index.cfm/about-us/railo-team/gert-franz /) –

+0

感謝您對Gert的澄清!我欣賞後續行動。這是我的一個愚蠢的錯誤。在我所有CF編程的日子裏,我一直試圖避免使用與範圍變量相同的變量名,但在這一個實例中,我很快地創建了原型並做了我不應該做的事情。無論如何,謝謝澄清。您的幫助非常有幫助,特別是對於我所屬的組織。 ;) –