Как использовать cfparam для структуры в CF8?

Мне нужно передать структуру методу, но она не всегда будет определена.

Есть ли что-то подобное, что будет работать?

<cfparam name="system_message" default={}>

Когда я пытаюсь это сделать, я получаю, что аргумент, переданный функции, не имеет типа struct.

Кроме того, я понимаю, что я мог бы сделать это:

<cfif ! isdefined("system_message")>
      <cfset system_message = {}>
</cfif>

Но мне просто интересно, есть ли более короткий способ сделать это, используя cfparam.

Спасибо за любую помощь!


person RandyLahey    schedule 27.01.2012    source источник


Ответы (3)


Что о:

<cfparam name="system_message" default="#StructNew()#">

CF8 не любит версию с фигурными скобками.

person RobG    schedule 27.01.2012

Вы близко. Вам нужно будет написать это как:

<cfparam name="system_message" default="#{}#">
person Peruz Carlsen    schedule 27.01.2012
comment
Когда я использую это, я получаю эту ошибку: Недопустимая конструкция CFML найдена в строке 5 в столбце 50. ColdFusion просматривал следующий текст: {. Кстати, Coldfusion 8, не уверен, что здесь это имеет значение. - person RandyLahey; 27.01.2012
comment
CF 8 имеет значение. Как отмечалось выше @RobG, CF 8 не поддерживает эту нотацию для создания структур. Вместо этого используйте StructNew(). - person Sean Coyne; 27.01.2012
comment
Поскольку ответ @RobG более правильный (из-за используемой версии ColdFusion), вместо этого вы должны принять его ответ. - person ale; 27.01.2012

Если вы передаете это методу, вам следует рассмотреть возможность использования <cfargument> в вызове <cffunction>, а не более глобального <cfparam>. Применяется тот же атрибут «по умолчанию». Тогда вы знаете, что ваша переменная существует только в области ARGUMENT внутри функции, лучшая инкапсуляция!

<cfargument name="system_message" default="#structNew()#">
person Dan A.    schedule 27.01.2012