0

次のようなマッチングの違いは何ですか?

fun(Binary) ->
    [Value, Rest] = binary:split(Binary, <<101>>)
end

fun(Binary) ->
    [Value, <<Rest/binary>>] = binary:split(Binary, <<101>>)
end

1つは、バイナリをトラバースしてサブバイナリポインタを保持するときにカウンタをインクリメントするだけで、もう1つは新しいバイナリをコピーする可能性があると考えています。何か案は?

4

2 に答える 2

1

timerモジュールのtc/N機能でテストできると思います。

于 2012-05-16T11:00:45.917 に答える
1

パターンマッチングは2つの方法で考えることができます。

方法1:

[A,B] = [<<"abcd">>,<<"fghi">>] 

方法2:

[A, <<B/binary>>] = [<<"abcd">>,<<"fghi">>]

Bがバイナリであることを確認する必要がない限り、メソッド2は<< "fghi">>をBに割り当てるだけでなく、バ​​イナリであることも確認するため、より長く、数マイクロ秒かかります。

ただし、方法2よりも多くの解析が必要な場合は、さらに先に進むことができますが、方法1では実行できません。

[A, <<B:8, Rest/binary>>] = [<<"abcd">>,<<"fghi">>].
于 2012-05-16T15:23:39.453 に答える