我终于开始在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。
我是否只需要检查格式是否已定义并为其赋值?或者有更好的方法吗?
由于
答案 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>
根据需要添加您首选的其他级别的数据验证。