2011-10-17 5 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に変換されなかったようです。

Formatが定義されているかどうかをチェックして値を付けるだけでいいですか?それともこれを行うより良い方法がありますか?

おかげ

答えて

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私は私の答えの2番目の部分で言っていた同じではありませんか? :) – Sergii

1

関数に渡されたすべての変数は、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> 

、ご希望の追加を追加します。必要に応じてデータ検証のレベル。

+0

私はあなたが何をしているかを見ていますが、それは実際には最もクリーンな方法ではありませんか? 4つまたは5つの入力が必要な場合は、この方法を試してみてください。すべての関数定義には1つの変数しかないので、実際に何が渡される必要があるかを見るには関数のコードを調べる必要があります。 – Limey

+0

これはcfscriptブロックで行う方法です。より洗練されたアプローチが必要な場合は、に戻って、すべての引数を名前で指定する必要があります。必要なものはfalseです...しかし、それらの存在をプログラムでチェックしなければなりませんデータ。 –

+0

これはまた、5のCFのバージョンで動作します。[Sergiiのソリューション](http://stackoverflow.com/questions/7798356/can-you-do-optional-parameters-in-a-function-thru-cfscript/7798603 #7798603)CF 8が必要です(私は信じています)。 – ale

関連する問題