2014-11-25 6 views
0

Я пытаюсь определить функцию в шаблоне, но иногда шаблон вызывается дважды. Я попыталсяСохранение функции из определения дважды

<cfscript> 
if (not isdefined("tested")) { 

    string function tested(required string component) output="false" { 

     if (arguments.component CONTAINS "internal") return 'N/A'; 
    .... 


</cfscript> 

Но я все еще получаю

enter image description here

ответ

5

Я не верю, что вы можете сделать то, что вы пытаетесь сделать.

При определении функции в коде, даже если вы окружите его IF/ELSE, среда выполнения компилятор еще собирается разобрать код с целью создания байт-код Java, необходимые для его запуска. Таким образом, ваш класс/функция определяется дважды в отношении организации кода. Вся идея функции или компонента заключается в том, что вы перемещаете ее за пределами вашего процессуального или логического кода в свою собственную библиотеку или группу функций - таким образом ее легко использовать повторно. Жаль быть носителем плохие новости :)

+1

Хорошая точка для предлагая организации кода лучше, так что такого рода вещи не придумать. Симптоматично плохое проектирование, чтобы иметь автономные UDF, плавающие вокруг места, а также иметь недостаточный контроль над кодом, который приводит к этой ситуации в первую очередь. –

+0

Адам, вы, конечно, правы, но вам нужно лицо smilin, поэтому Джеймс знает, что вы его не расстроены :) –

+0

StackOverflow сказал мне, что я использовал «+ 1» в своем комментарии, так что удивил, что они позволили мне делайте что-то настолько легкомысленное, как добавление смайлика. Джеймс знает, что мне нравится в любом случае. ;-) –

2

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

<cfscript> 
if (!isdefined("tested")) { 
    include "tested.cfm"; 
} 
</cfscript> 

а затем переместите tested() в tested.cfm.

Или, если вы используете CF11, вы можете попробовать include "tested.cfm" runonce=true;

См: Can you isolate code from being seen from CF10 compiler?

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