2017-01-19 2 views
0

Если у вас есть ситуация, когда один UDF вызывает в нем другой UDF, можно ли ссылаться на локальную область родителя, не передавая ее в качестве аргумента? Мои инстинкты говорят мне, что это невозможно, поскольку локальный объем функции предположительно будет выделен по дизайну.В ColdFusion UDFs есть способ ссылаться на переменную из области родительской функции?

Например:

<cffunction name="function01"> 

    <cfset var fruit = "apple" /> 

    <cfset function02() /> 

</cffunction> 

<cffunction name="function02"> 

    <cfdump var="#fruit#" /> <!--- can I reference fruit? ---> 

</cffunction> 

Единственный способ я знаю, как дать доступ function02 к локальным переменным области видимости родительского ОДС должен передать его в качестве аргумента. Конечно, вы также можете использовать области REQUEST, FORM, URL, SESSION и APPLICATION, я полагаю.

<cffunction name="function01"> 

    <cfset var fruit = "apple" /> 

    <cfset function02(fruit) /> 

</cffunction> 

<cffunction name="function02"> 

    <cfargument name="fruit" /> 

    <cfdump var="#fruit#" /> 

</cffunction> 
+6

используя аргумент, кажется, что это был бы правильный выбор, то почему бы Вам не сделать так? –

+0

Это больше ради любопытства. Я знаю, что с тегами вы можете использовать область CALLER. Я не видел никаких ссылок на что-либо подобное для тегов . –

+1

Если две функции находятся в одном файле, заберите слово 'var' в function01. Конечно, это меняет вопрос, потому что он больше не будет локальной областью родителя. –

ответ

0

На основе замечаний у всех правильный ответ в том, что вы не можете ссылаться на локальная переменная области с дочерней функцией. Единственный способ передать ссылку - либо передать переменную (ы) в качестве аргументов дочерней функции, либо сохранить переменные в другой области (например, ПЕРЕМЕННЫЕ, ФОРМЫ, URL, ЗАПРОС, СЕССИЯ, ПРИМЕНЕНИЕ, СЕРВЕР и т. Д. ..)

предпочтительный способ передать переменную (ы) в качестве аргументов функции ребенка:

<cffunction name="function01"> 

    <cfset var fruit = "apple" /> 

    <cfset function02(fruit) /> 

</cffunction> 

<cffunction name="function02"> 

    <cfargument name="fruit" /> 

    <cfdump var="#fruit#" /> 

</cffunction> 
1

Объявив fruit с var перед ним, его только в локальной области (в пределах функции).

попробовать:

<cffunction name="function01"> 

    <cfset fruit = "apple" /> 

    <cfset function02() /> 

</cffunction> 

<cffunction name="function02"> 

    <cfdump var="#fruit#" /> <!--- can I reference fruit? ---> 

</cffunction> 

Это может работать, но это не «чистый» способ обработки этого, лучше работать с аргументами

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