_
在Elixir中使用a命名任何未使用的变量是一般规则.这样做会阻止绑定到该变量的任何内容.
然而,我注意到一种广泛使用的带有下划线的前缀模式,表示一个被忽略的参数,形式为_tail
(目的是提供一个关于变量是什么的提示).
如果您尝试访问,则通过shell中的警告来鼓励这种情况_tail
:
警告:设置后使用下划线变量"_tail".前导下划线表示应忽略变量的值.如果是这样,请重命名变量以删除下划线
但这是抓住了; _tail
将变量绑定到它,而使用_
它时则不然.
这是否意味着在使用除_
?之外的任何其他内容命名忽略的变量时会有性能损失?或者Elixir仍然_
在幕后绑定,并且只是在任何访问尝试时出错?
编辑:它看起来像Erlang的编译器优化了明确这种情况下,治疗_*
的_
,因此不存在开销,来源:http://erlang.org/doc/efficiency_guide/myths.html
鉴于每个人都已经放弃了免责声明而不担心这种性能行为,答案是:如果没有使用变量,编译器会注意到它,编译后的字节码就会忽略它,就好像你使用过一样_
.这就是为什么如果你这样做x = 1
而且永远不会x
得到编译器警告的原因.
事实上,Erlang(以及Elixir)对_
变量有特殊的行为.但除非你测量到这对你的应用程序来说是一个性能问题,否则我不会太担心这个问题.我想如果你在函数内部做任何有趣的事情,那么绑定变量的开销将是完全无关紧要的.