0

对于我正在编写的框架,我必须实现匹配器功能,例如equals(测试相等性并打印出不匹配时预期匹配的内容)。

问题是我需要为字符串和整数(可能还有数组)实现这个,我不知道如何根据它们的类型区分这些函数。一些想法是:

  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,让调用者egt输出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 回答