Erlang参数匹配和性能

时间:2011-02-19 08:16:08

标签: performance erlang matching

从性能(或任何其他)角度来看,这两者之间有何不同?

f1(X =无论如何) - >好; (更多...)

f2(无论= X) - >好; (更多...)

2 个答案:

答案 0 :(得分:4)

您可以通过使用-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 :(得分:1)

模式中的=表示LHS和RHS是别名,指的是数据相同的值。双方必须匹配该值,因此写入{X}=[Y]的内容将永远不会匹配(并且编译器会抱怨)。它最常用于{X,Y}=T,它允许您匹配和拉开数据仍然具有对整个结构的引用。两者都有你的蛋糕和吃它。请注意,它可以在模式中的任何位置使用,而不仅仅是在顶层,因此您可以像{foo,[H|T]=A,B,C}一样使用它。

没有性能差异。