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



我现在正在研究 rabbitmq 源代码以学习 erlang 技术。

以下内容来自rabbit_misc.erl文件。目的是检查应用程序的最低版本。在version_compare/N的第5和第7小句中,有一个特殊的字符,就是$0。但我不知道它是怎么发生的?我不会发生这种情况的原因是,在最后一句话中,在 lists: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.

$0 不是一个特殊字符 - 这是零字符串:"0"。

版本可能很复杂:0.1.22.333 和

splitwith/2 拆分为头和尾("0"和".1.22.333")。

我想处理 $0 适用于"1.0.0"和"1"等情况

{"1",".0.0"} vs {"1",[]}

最新更新