Можно ли передать функцию в качестве аргумента другой функции в ColdFusion? Если да, то как? - PullRequest
0 голосов
/ 11 февраля 2020

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

<cfset function_A(function_B())/>

Здесь function_A и function_B - пользовательские функции.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Мы делаем это постоянно.

<cffunction  name="myfucn1">
    <cfreturn 100>
</cffunction>

<cffunction  name="myfunc2">
    <cfargument  name="myNum">
    <cfdump  var="#arguments.myNUm#">
    <cfabort>
</cffunction>

<cfset myfunc2(myfucn1())>

Вывод, который вы получите, будет 100

1 голос
/ 11 февраля 2020

Конечно, вы можете передать функцию в качестве аргумента. Это ничем не отличается от любого другого языка. Пока тип возвращаемого значения function_B() совпадает с типом данных первого аргумента function_A(), ваш пример <cfset function_A(function_B())/> полностью допустим.

То, что вы спрашиваете, является обычной практикой и выполняется постоянно. Например, вам нужно получить максимальное количество из 3 разных значений. Вы бы sh сделали это следующим образом.

<cfset maxVal = max(a, max(b, c))>

Как видите, max() принимает 2 аргумента. Предполагая, что a, b и c являются действительными числами, первый аргумент - это цифра c, а второй аргумент - это функция, которая возвращает большее значение чисел c для b и c. https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/max.html

...