我最近启动了Erlang,我注意到编译时我经常收到"警告:变量X未使用".例如,使用以下函数,该函数查找列表中的最大元素:
max([Head|Tail]) -> max(Head,Tail). max(Element,[Head | Tail]) when Element < Head -> max(Head,Tail); max(Element,[Head | Tail]) -> max(Element, Tail); max(Element,[]) -> Element.
编译器警告我,在函数的第三种情况下,Head未使用.如何在没有Head的情况下编写函数?
这应该抑制警告而不会混淆:
max(Element,[_Head | Tail]) -> max(Element, Tail);
如果您命名变量_
而不是Name
(例如,_
而不是Head
)变量将不受约束,并且您将不会收到警告.
如果您命名变量_Name
而不是Name
(例如,_Head
而不是Head
)变量将被绑定,但您仍然不会收到警告.引用以_
代码开头的变量被认为是非常糟糕的做法.
建议保留变量的名称以提高代码的可读性(例如,更容易猜出_Head
目的是什么而不仅仅是_
).
max([Head|Tail]) -> max(Head,Tail). max(Element,[Head | Tail]) when Element < Head -> max(Head,Tail); max(Element,[_| Tail]) -> max(Element, Tail); max(Element,[]) -> Element.
应该做的伎俩.将'Head'替换为'_'的原因是说参数将放在那里,但我不需要它.