0

私が書いているフレームワークの場合、たとえばequals(whicl は等しいかどうかをテストし、一致しない場合は一致すると予想されるものを出力します) などのマッチャー関数を実装する必要があります。

問題は、文字列と整数 (およびおそらく配列) に対してこれを実装する必要があり、型に基づいてこれらの関数を区別する方法がわからないことです。いくつかのアイデアは次のとおりです。

  1. ある種のプレフィックスを使用する

    integer_equals '1' '2'
    string_equals '1' '2'
    
  2. タイプを関数に渡す

    equals 'integer' '1' '2'
    equals 'string' '1' '2'
    
  3. プレフィックスを で区切ります。(ドット)

    string.equals '1' '2'
    integer.equals '1' '2'
    

これらのうちどれが最も適しているでしょうか?つまり、最も慣用的なもの、または最も驚くべきものではないものはどれでしょうか?

4

2 に答える 2

2

あなたの提案 1 (string_equals) は、最も明確で驚くべきことではないと思います。

于 2012-08-20T07:47:26.760 に答える
1

多分tclのように:

string equal s1 s2

実装の例: ステータスを返す関数、その他の実装は、出力を書き込みif [ "$2" = "$3" ];then echo true; else echo false; end、呼び出し元が出力を受け取るようにすることですr=$(string equal a z)

string() {
  case "$1" in
  equal)
    [ "$2" = "$3" ]
    return $?
    ;;
  *)
    echo "'$1' not implemented" >&2
    return 1
    ;;
  esac
}

そして使い方

if string equal a a; then echo true; fi
string equal a b; echo $?;   # exit status 0:true, <>0:false
于 2012-08-20T07:49:58.933 に答える