Можете ли вы варьировать область действия нескольких переменных одновременно в Coldfusion? - PullRequest
4 голосов
/ 21 апреля 2011

Хотя это возможно и не выдает ошибку, я хотел бы знать, является ли это одобренной практикой варьировать область видимости нескольких переменных в одной строке следующим образом:

<cfset VAR var1 = var2 = var3 = ''>

Буду признателен за все идеи и мненияособенно если они приходят с документацией в качестве вспомогательного аргумента.Я знаю, что это работает без выдачи ошибки, но я не могу найти конкретную документацию, в которой говорится, будет ли она охватывать переменную или просто объявляет значение.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 29 января 2013

FWIW, да, вы можете сделать это в CF9:

<cfset var a = var b = c = d*5>

Вот документация , в которой приведен этот пример. В этом случае я предполагаю, что переменные c и d уже были определены ранее в функции.

Таким образом, вам нужно повторить ключевое слово var для каждой переменной, и в вашем случае это приведет к:

<cfset VAR var1 = VAR var2 = VAR var3 = ''>
2 голосов
/ 21 апреля 2011

Как и все говорили, вам нужно добавить переменные в var или local.Также, как сказал @Ben, вы не можете реально изменять переменные области видимости, как у вас.Я бы предложил использовать локальную область видимости и сделать что-то вроде следующего:

<cfscript>
     var val = 'some value'
     local = {
          var1 = duplicate(val),
          var2 = duplicate(val),
          var3 = duplicate(val)
      };
</cfscript>

Это, на мой взгляд, самый быстрый способ достичь того, что вы делаете.Я использую дублирующую функцию только для того, чтобы при использовании сложной переменной в качестве значения val (struct, array и т. Д.) У вас не возникало проблем со ссылками.

1 голос
/ 21 апреля 2011

Полагаю, мне следует начать с указания на то, что ваш код не изменяет область видимости переменных, он просто устанавливает их значения.Вам нужно использовать ключевое слово VAR (или область действия LOCAL в CF9), чтобы указать, что переменные должны иметь область действия VAR.

Кроме того, цепочечные назначения не работают во всех версиях CF.Мое рабочее место все еще на 6.1, и это выдает ошибку.

Наконец, если я правильно помню, если вы используете оператор присваивания, как указано выше, var1 и var2 равны true, так как результатом операции присваивания является true, если не произошло ошибок.(кто-то поправляет меня, если я ошибаюсь, так как я не могу проверить это на работе, поскольку мы находимся на 6.1)Когда-либо.Во-первых, я думаю, что отдельные задания более понятны.во-вторых, это работает не во всех версиях.Поэтому я бы предпочел, чтобы индивидуальные задания были предпочтительнее.

1 голос
/ 21 апреля 2011

<cfset> не охватывает переменные.

Чтобы правильно охватить переменные, требуется ключевое слово var

<cfset var someVariable = 1>

В противном случае переменные будут созданы,но назначен на область по умолчанию.Область действия по умолчанию зависит от контекста и версии CF, о которой мы говорим.

Для методов CFC:

  • CF9 -> LOCAL scope
  • CF8-> VARIABLES scope

Из-за правил области действия в CF9 ключевое слово var на самом деле не нужно.Переменные могут быть добавлены в область действия LOCAL напрямую и в любое время (<cfset LOCAL.foo = "bar").Нет необходимости в их досрочном расширении.

0 голосов
/ 22 апреля 2011

Я видел, как люди просто создавали структуру var и определяли ваши переменные как ключи для структуры.Таким образом, вам не нужно постоянно использовать var.Например:

<cfset var local = structNew() />
<cfset local.var1 = "" />
<cfset local.var2 = "" />

Это полезно для тех, кто использует ColdFusion Server 8 и ниже и застрял в области действия var.

...