Erlang сопоставление аргументов и производительность - PullRequest
2 голосов
/ 19 февраля 2011

Есть ли разница между этими двумя с точки зрения производительности (или любой другой)?

f1 (X = что угодно) -> хорошо; (Подробнее ...)

и

f2 (безотносительно = X) -> хорошо; (Подробнее ...)

Ответы [ 2 ]

4 голосов
/ 19 февраля 2011

Вы можете проверить код, который генерирует компилятор, компилируя с -S, который генерирует файл .S.Вы получите что-то вроде этого, и вы можете подтвердить, что компилятор генерирует точно такой же код для каждого из ваших двух случаев.

{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.

Лично я нахожу "все = X" нелогичным и труднеечитать.

1 голос
/ 21 февраля 2011

= в шаблоне означает, что LHS и RHS являются псевдонимами , относящимися к одному и тому же значению данных. Обе стороны должны соответствовать значению, поэтому запись чего-либо {X}=[Y] никогда не будет соответствовать (и компилятор будет жаловаться). Чаще всего он используется как {X,Y}=T, что позволяет вам сопоставлять и разбирать данные и по-прежнему имеют ссылку на всю структуру. У обоих есть свой пирог и есть его. Обратите внимание, что он может использоваться в любом месте шаблона, а не только на верхнем уровне, поэтому вы можете использовать его как {foo,[H|T]=A,B,C}.

Различий в производительности нет.

...