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

Erlang 版本比较功能,关于特殊字符,erlang,rabbitmq,Erlang,Rabbitmq,我现在正在学习rabbitmq源代码以学习erlang技术 以下内容来自rabbit_misc.erl文件。其目的是检查应用程序的最低版本。 在version\u compare/N的第5和第7小节中,有一个特殊字符,即$0。但我不知道这是怎么发生的? 我之所以不这样做,是因为在最后一句中,在list:splitwith/N之后,AT1和BT1将以“$”开头。 版本\u比较(A、B、lte)-> 案例版本(A,B) 情商->真实; lt->true; gt->false 结束; 版本比较(A、B

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

以下内容来自
rabbit_misc.erl
文件。其目的是检查应用程序的最低版本。 在
version\u compare/N
的第5和第7小节中,有一个特殊字符,即
$0
。但我不知道这是怎么发生的? 我之所以不这样做,是因为在最后一句中,在list:splitwith/N之后,
AT1
BT1
将以
“$”开头。

版本\u比较(A、B、lte)->
案例版本(A,B)
情商->真实;
lt->true;
gt->false
结束;
版本比较(A、B、gte)->
案例版本(A,B)
情商->真实;
gt->true;
lt->false
结束;
版本比较(A、B、结果)->
结果=:=版本比较(A,B)。
版本比较(A,A)->
情商;
版本比较([],[$0 | B])->
版本比较([],dropdot(B));
版本比较([],)->
lt;%%2.3 < 2.3.1
版本比较([$0 | A],])->
版本比较(dropdot(A),[]);
版本比较(u,[])->
gt;%%2.3.1 > 2.3
版本比较(A、B)->
{AStr,ATl}=lists:splitwith(fun(X)->X=/=$.end,A),
{BStr,BTl}=lists:splitwith(fun(X)->X=/=$.end,B),
ANum=列表到整数(AStr),
BNum=列表到整数(BStr),
如果ANum=:=BNum->version_比较(dropdot(ATl)、dropdot(BTl));
ANumlt;
ANum>BNum->gt
结束。

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

版本可能很复杂:0.1.22.333和splitwith/2拆分为头部和尾部(“0”和“.1.22.333”)

我想处理0美元是为了“1.0.0”和“1”这样的情况


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

版本可能很复杂:0.1.22.333和splitwith/2拆分为头部和尾部(“0”和“.1.22.333”)

我想处理0美元是为了“1.0.0”和“1”这样的情况


或者更确切地说,它是字符
0
,48的拉丁文1值。
$c
是字符的拉丁1(和unicode)值的语法糖。或者更确切地说,它是字符
0
,48的拉丁1值。
$c
是字符的拉丁1(和unicode)值的语法糖。
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"} vs {"1",[]}