使用" _var"时的性能影响结束" _"在Elixir?

时间:2015-12-28 03:55:13

标签: elixir

一般规则是在Elixir中使用_命名任何未使用的变量。这样做会阻止绑定到该变量的任何内容。

然而,我注意到一种广泛使用的带有下划线的前缀模式,以_tail的形式表示被忽略的参数(目的是提供关于变量的提示)。 / p>

如果您尝试访问_tail,则会通过shell中的警告来鼓励这种情况:

  

警告:下划线变量" _tail"被设置后使用。前导下划线表示应忽略变量的值。如果是这样,请重命名变量以删除下划线

但这是抓住了; _tail将变量绑定到它,而当仅使用_时,它不会。

这是否意味着在使用除_以外的任何内容命名忽略的变量时会有性能损失?或者Elixir仍然在幕后绑定_,并且只是在任何访问尝试时出错?

编辑:看起来Erlang编译器专门优化了这种情况,将_*视为_,因此没有开销,来源:http://erlang.org/doc/efficiency_guide/myths.html < / p>

2 个答案:

答案 0 :(得分:7)

鉴于每个人都已经放弃了免责声明而不担心这种性能行为,答案是:如果没有使用变量,编译器会注意到它,编译后的字节码会忽略它,就像你使用{{ 1}}。这就是为什么如果你_而不是x = 1,你会收到编译器警告的原因。

答案 1 :(得分:5)

确实,_变量在Erlang(以及Elixir)中有特殊行为。 但除非你测量到这对你的应用程序来说是一个性能问题,否则我不会太担心这个问题。我想如果你在函数内部做了一些有趣的事情,那么绑定变量的开销将是完全无关紧要的。