Можете ли вы сделать необязательные параметры в функции через cfscript? - PullRequest
9 голосов
/ 17 октября 2011

Наконец-то я приступил к написанию материала в cfscript, и поэтому я начинаю с написания некоторых необходимых функций форматирования.Вот пример:

    Function FormatBoolean(MyBool, Format) { 

    Switch(Format){
        Case "YES/NO":{
            If (MyBool eq 1)
                Return "YES";
            Else
                Return "NO";
            Break;
        }

        Default:{
            If (MyBool eq 1)
                Return "Yes";
            Else
                Return "";
            Break;
        }
    }
}

Я хотел бы сделать Format необязательным аргументом.Если вы не включите аргумент, функция в настоящий момент все еще будет работать, но не найдет формат, и кажется, что cfparam не был переведен в cfscript.

Должен ли я просто проверить, определен ли формат, и дать ему значение?Или есть более хороший способ сделать это?

Спасибо

Ответы [ 2 ]

15 голосов
/ 17 октября 2011

Лично я предпочитаю устанавливать значения по умолчанию для такого рода аргументов.Также я немного переработал функцию ... Но не проверял:)

function FormatBoolean(required any MyBool, string Format = "") { 

    switch(arguments.Format) {
        case "YES/NO":
            return YesNoFormat(arguments.MyBool EQ 1);
        default:
            return (arguments.MyBool eq 1) ? "Yes" : "";
    }

}

Обратите внимание, что (arguments.MyBool EQ 1) может быть заменено на (arguments.MyBool), поэтому оно охватывает все логические значения.Вам может быть интересно сделать его более надежным, что-то вроде этого (isValid("boolean", arguments.MyBool) AND arguments.MyBool) - это должно позволить вообще проверять любое значение.

1 голос
/ 17 октября 2011

Все переменные, переданные в функцию, доступны для программного доступа через область ARGUMENTS.Вы можете ссылаться на него, как на массив (потому что он есть), а также на стандартный доступ к структурным ключам (который я сделал для вас ниже для параметра MyBool):

<cfscript>
    Function FormatBoolean(MyBool) { 

    var theFormat = '';

    if (ArrayLen(ARGUMENTS) GT 1)
        theFormat = ARGUMENTS[2];

    Switch(theFormat){
        Case "YES/NO":{
            If (ARGUMENTS.MyBool eq 1)
                Return "YES";
            Else
                Return "NO";
            Break;
        }

        Default:{
            If (ARGUMENTS.MyBool eq 1)
                Return "Yes";
            Else
                Return "";
            Break;
        }
    }
}
</cfscript>

При необходимости добавьте предпочтительные дополнительные уровни проверки данных.

...