Есть ли разница между этими двумя с точки зрения производительности (или любой другой)?
f1(X=что угодно) -> хорошо; (более...)
а также
f2(что угодно=X) -> хорошо; (более...)
Есть ли разница между этими двумя с точки зрения производительности (или любой другой)?
f1(X=что угодно) -> хорошо; (более...)
а также
f2(что угодно=X) -> хорошо; (более...)
Вы можете проверить код, созданный компилятором, скомпилировав с параметром -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» нелогичным и трудным для чтения.
whatever=X
. Для меня =
ведет себя так же, как и в теле: правая часть — это переменная/значение, а левая часть — это шаблон, с которым она сопоставляется. Это, как говорит @cthulahoops, не имеет значения для сгенерированного кода, LHS и RHS являются псевдонимами.
- person rvirding; 21.02.2011
=
в шаблоне означает, что левая и правая стороны являются псевдонимами, ссылающимися на одно и то же значение данных. Обе стороны должны совпадать со значением, поэтому запись чего-то {X}=[Y]
никогда не будет совпадать (и компилятор будет жаловаться). Чаще всего он используется как {X,Y}=T
, что позволяет вам сопоставлять и разделять данные и по-прежнему иметь ссылку на всю структуру. И иметь свой пирог, и есть его. Обратите внимание, что его можно использовать в любом месте шаблона, а не только на верхнем уровне, поэтому вы можете использовать его как {foo,[H|T]=A,B,C}
.
Разницы в производительности нет.