你能通过cfscript在函数中做可选参数吗?

时间:2011-10-17 19:12:28

标签: coldfusion coldfusion-9

我终于开始在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 个答案:

答案 0 :(得分:15)

我个人更喜欢将默认值设置为这种参数。我也重构了一点功能......但没有经过测试:)

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 :(得分:1)

传递给函数的所有变量都可通过ARGUMENTS范围以编程方式访问。你可以将它称为数组(因为它是),以及标准的struct key访问(我在下面为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>

根据需要添加您首选的其他级别的数据验证。