Проблема конкатенации строк с 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.

Другие вопросы по тегам