Зарезервированное ключевое слово на основе сценария не принимается, но оно принимается в теге - PullRequest
4 голосов
/ 09 мая 2019

Здесь я задаю вопрос о зарезервированных слов . Насколько мне известно, ключевое слово не может быть переменной.

Я столкнулся с проблемой передачи зарезервированной строки слова в качестве аргумента в коде, основанном на сценариях, но не столкнулся с какой-либо ошибкой при написании того же кода в теге. Мой вопрос здесь заключается в том, что я передал имя аргумента как Для . Если это зарезервированное слово, мы не можем использовать право на основе тегов и сценариев. Как зарезервированное слово принять в коде на основе тегов? Поправьте меня, если я что-то неправильно понял.

БЮР: Я приложил свой код и успешно обновил код на основе тегов и ошибку для кода на основе сценариев.

<cfset testCall = callFunc( a=10,For=20)>
Out put :#testCall#

<cfscript>
    testCall = callFunc( a=10,For=20);
    writeDump(testCall);

</cfscript>

<cffunction name="callFunc" access="public" returntype="Any">
    <cfargument name="a" required="true">
    <cfargument name="For" required="true">
    <cfreturn ARGUMENTS.a * ARGUMENTS.For>
</cffunction>

Вывод: 200 (Это вывод на основе тегов)

Следующая проблема - код на основе скрипта,

enter image description here

Может кто-нибудь знать, почему это произошло? Или поправьте меня, если я неправильно понял. Заранее спасибо!

1 Ответ

0 голосов
/ 17 мая 2019

Обычно я стараюсь избегать всего, что может быть зарезервированным словом в большинстве языков, поэтому я не сталкивался с этим. Однако, учитывая все различия между синтаксисом CFScript и CFML, неудивительно, что зарезервированные слова также различаются. Список зарезервированных слов подтверждает, что ключевые слова для синтаксиса на основе сценариев отличаются от ключевых слов для синтаксиса на основе тегов .

Если подумать, единственная причина запретить определенные слова состоит в том, что они создают неоднозначность, которая препятствует точной оценке кода. Учитывая огромные различия между этими двумя синтаксисами, легко увидеть, как конкретное слово, такое как for, может иметь особое значение в контексте CFScript, но быть совершенно безвредным при использовании в CFML. В этом сценарии нет технической причины, по которой проблемное слово должно быть также запрещено в CFML. Хотя Adobe могла бы изменить это поведение, честно говоря, я бы удивилась, если бы они это сделали, потому что это сломало бы большую часть существующего кода CFML ... включая ваш.

В конечном счете, CFML и CFScript - это два разных «языка» (из-за отсутствия лучшего слова). Хотя вы можете надеяться, что любой код CFML будет работать точно так же в CFScript, вы не можете зависеть от этого. Они очень разные звери. Поэтому ожидайте, что некоторые вещи будут работать в одном, а не в другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...