版本比较功能,关于特殊字符

时间:2012-06-06 00:25:08

标签: erlang rabbitmq

我正在研究rabbitmq源代码,用于学习erlang技术。

以下内容来自rabbit_misc.erl文件。目的是检查应用程序的最低版本。 在version_compare/N的第5和第7子信道中,有一个特殊字符,即$0。但我不知道它是怎么发生的? 我不会发生这种情况的原因是,在最后一次发送中,在列表后:splitwith / N,AT1BT1将以"$."开头。

version_compare(A, B, lte) ->
    case version_compare(A, B) of
        eq -> true;
        lt -> true;
        gt -> false
    end;
version_compare(A, B, gte) ->
    case version_compare(A, B) of
        eq -> true;
        gt -> true;
        lt -> false
    end;
version_compare(A, B, Result) ->
    Result =:= version_compare(A, B).

version_compare(A, A) ->
    eq;
version_compare([], [$0 | B]) ->
    version_compare([], dropdot(B));
version_compare([], _) ->
    lt; %% 2.3 < 2.3.1
version_compare([$0 | A], []) ->
    version_compare(dropdot(A), []);
version_compare(_, []) ->
    gt; %% 2.3.1 > 2.3
version_compare(A,  B) ->
    {AStr, ATl} = lists:splitwith(fun (X) -> X =/= $. end, A),
    {BStr, BTl} = lists:splitwith(fun (X) -> X =/= $. end, B),
    ANum = list_to_integer(AStr),
    BNum = list_to_integer(BStr),
    if ANum =:= BNum -> version_compare(dropdot(ATl), dropdot(BTl));
       ANum < BNum   -> lt;
       ANum > BNum   -> gt
    end.

1 个答案:

答案 0 :(得分:0)

$ 0不是特殊字符 - 这是零字符串:“0”。

版本可能很复杂:0.1.22.333和splitwith / 2拆分为head和tail(“0”和“.1.22.333”)。

我认为处理$ 0适用于“1.0.0”和“1”

等情况
{"1",".0.0"} vs {"1",[]}