2013-09-19 2 views
0

Мне нужно вызвать функцию объекта и передать ему переменную. Поскольку мне нужно выполнить множественный вызов функции этого объекта, я попытался создать только один обработчик, который вызывает определенную функцию по значению формы, которое я передаю. Код работает, но CFBuilder показывает мне, что есть ошибка (отсутствующая точка с запятой в последней строке). Я нахожусь на Railo.Имя переменной функции ColdFusion и CfBuilder

local.myReport = seoUtility.init(); 

local.func = form.action; 

local.report = local.myReport[local.func](form.user); 

Вопрос: Этот код верен? Я могу просто игнорировать значок ошибки cfbuilder?

+1

Код верный для Railo CFML, но этот синтаксис не поддерживается на CF. Как ни странно, Adobe ColdFusion Builder Adobe поддерживает только реализацию Adobe CFF ColdFusion. –

+0

Спасибо за помощь. Я просто нашел ссылку, которая хорошо объясняет эту разницу между ACF и Railo. однако я думаю, что я просто проигнорирую ошибку cfbuilder. https://groups.google.com/forum/#!topic/railo/zJUxYbUmwl0 – Tropicalista

ответ

0

Если вы не хотите CFBuilder пилить вас о синтаксисе, вы можете изменить это:

local.myReport = seoUtility.init(); 
local.func = local.myReport[form.action]; 
local.myReport.func = local.func; 
local.report = local.myReport.func(form.user); 

Это устанавливает local.func к экземпляру seoUtility в качестве ссылки на действительную функцию вы хотите позвонить , сохраняя его связь с родительским объектом. Таким образом, синтаксис оскорбительного []() не требуется.

Однако это работает только в том случае, если seoUtility.init() возвращает новый экземпляр каждый раз, в отличие от одноточечного, совместно используемого приложением, и в этом случае будет состояние гонки во всех вызовах local.myReport.func().

+2

На самом деле это не эквивалентная функциональность - вы извлекаете функцию из объекта, в котором она находится, что потенциально меняет поведение (в зависимости от того, что она делает) , С CF10 Adobe добавила функцию [invoke] (https://learn.adobe.com/wiki/display/coldfusionen/Invoke) (по-видимому, потому, что они слишком ленивы, чтобы исправить ее правильно), но было бы бессмысленно сделать код уродливый, если он работает только на Railo. –

+0

Отличный улов, @PeterBoughton. Обновлен мой ответ для поддержания отношения объекта-функции. – imthepitts

Смежные вопросы