Проблема конкатенации строк с Railo4
Я работаю над приложением, созданным на 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
та же ошибка сообщается.
Есть идеи?
2 ответа
Url
это зарезервированное слово в ColdFusion, поэтому, даже если вы изменяете его в функции, оно по-прежнему определяет фактическую структуру переменных url.
Вот полный список зарезервированных слов в ColdFusion
Sly,
Railo не позволяет вам использовать ЛЮБУЮ область видимости в качестве переменной внутри функций. Это преднамеренная несовместимость, поскольку Coldfusion это позволяет. Но после этого вы больше не сможете получить доступ к области действия URL. Вот почему мы этого не допускаем. Просто вызовите переменную sUrl, например.
НТН
Gert Franz Railo ltd.