2011-10-17 86 views
8

我终于开始用cfscript写东西了,所以我开始写一些需要的格式化函数。这里是一个例子:你可以在函数中通过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; 
     } 
    } 
} 

我想要做的是使格式可选参数。如果你不包含参数,函数目前仍然可以运行,但它不会找到格式,并且看起来cfparam没有被转换为cfscript。

我只需要检查格式是否定义并给它一个值?还是有更好的方法呢?

感谢

回答

13

我个人更喜欢将默认设置为这种参数。此外,我已经重构功能有点......但没有测试:)

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) - 这应该允许检查任何值。

+0

我删除了我以前的评论,因为这是正确的(我之前正在查看错误的列)感谢您获得一个简单而干净的解决方案! – Limey

+0

请记住'(arguments.MyBool)'和'(arguments.MyBool eq 1)'的结果略有不同。 – Leigh

+0

@Leigh我不是在回答的第二部分中说的吗? :) – Sergii

1

所有变量传递给函数都可以通过的参数范围访问编程。你可以参考它,就好像它是一个数组(因为它是),以及标准的结构键访问(我已经为你做了以下为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> 

添加您的首选附加必要时进行数据验证的级别。

+0

我明白你在做什么,但它并不是最干净的方式,是吗?如果您需要4或5个输入,请考虑尝试使用此方法。所有的函数定义都只有一个变量,你需要查看函数的代码,看看需要传递什么。 – Limey

+0

这就是你在cfscript模块中的工作方式。如果你想要一个更清洁的方法,你必须回到并按名称指定所有参数,并且需要'false',但是在访问它们之前,您仍然必须以编程方式检查它们的存在数据。 –

+0

这也适用于CF版本回到5. [Sergii的解决方案](http://stackoverflow.com/questions/7798356/can-you-do-optional-parameters-in-a-function-thru-cfscript/7798603 #7798603)需要CF 8(我相信)。 – ale

相关问题