パフォーマンス(または他の)観点からのこれらの2つの違いはありますか?アーラン引数の一致とパフォーマンス
f1(X =任意) - > ok; (もっと...)
と
F2(どんな= X) - > OK。 (続き...)
パフォーマンス(または他の)観点からのこれらの2つの違いはありますか?アーラン引数の一致とパフォーマンス
f1(X =任意) - > ok; (もっと...)
と
F2(どんな= X) - > OK。 (続き...)
コンパイラが生成するコードを調べるには、-Sでコンパイルして.Sファイルを生成します。このようなものが得られ、コンパイラがあなたの2つのケースごとにまったく同じコードを生成することを確認できます。
{function, f1, 1, 12}.
{label,11}.
{func_info,{atom,test},{atom,f1},1}.
{label,12}.
{test,is_eq_exact,{f,11},[{x,0},{atom,whatever}]}.
return.
私は「whatever = X」が個人的には直感的ではなく、読みにくいと判断します。
=
は、LHSおよびRHSがの別名であることを意味します。両者は値に一致する必要がありますので、何かを書くこと{X}=[Y]
は決して一致しません(そしてコンパイラは文句を言うでしょう)。これは、{X,Y}=T
のようによく使われ、データを一致させたり引き離したりすることができます。とはまだ構造全体を参照しています。どちらもあなたのケーキを食べて食べる。 のように使うことができるので、トップレベルだけでなくパターン内のどこでも使用できます。
パフォーマンスの違いはありません。
なぜパターンマッチング式として割り当てを使用していますか?それは非常に混乱しています。あなたは "f1()X =何でも"を意味しませんでしたか? –
Erlangでの割り当ては、バインドされていない変数とのパターンマッチングの効果です。少なくとも混乱はありません。 – andreypopp
私が引数で代入を使用するのは、割り当てられた変数を後でコードで使用できるようにするためです。上記のコードはこれを示すのはあまりにも簡単ですが、複雑なリストやタプルを使っていたら、複雑な構造を入力する代わりに、後で割り当てられた変数を使うことができます。私の前提は、エンジンは複雑な構造にパターンマッチすることであり、変数(これは私が欲しいものです)ではありません。私の質問は、これが真であるかどうか、すなわち上記のものが常に「何でも」(私が望むもの)の原子と一致するかどうか、あるいはXと時には一致するかどうかです。 – hello