2008-12-06 27 views
6

Recientemente comencé Erlang, y noté que recibía constantemente "Advertencia: la variable X no se usa" durante la compilación. Por ejemplo, tomemos la siguiente función, que encuentra el elemento máximo de una lista:Advertencias sobre variables no utilizadas en Erlang

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. 

El compilador me advierte que en el tercero caso de la función, la cabeza no se utiliza. ¿Cómo se puede escribir la función sin Head?

Respuesta

8

Esto debería suprimir la advertencia sin ser confuso:

max(Element,[_Head | Tail]) -> 
    max(Element, Tail); 
6
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. 

debe hacer el truco. La razón es que reemplazar 'Head' por '_' es sintaxis al decir que un parámetro se colocará allí, pero no lo necesito.

9

Si el nombre de una variable en lugar de _Name (por ejemplo _ en lugar de Head), no vinculan la variable, y no obtendrá una advertencia.

Si el nombre de una variable en lugar de _NameName (por ejemplo, en lugar de _HeadHead) la variable se ser atado, pero aún no recibirá una advertencia. Hacer referencia a una variable que comienza con _ en el código se considera muy mala práctica.

Se recomienda mantener el nombre de la variable para mejorar la legibilidad del código (por ejemplo, es más fácil adivinar para qué fue diseñado _Head que solo _).

+1

Las dos últimas oraciones se contradicen entre sí. –

+0

Sospecho que "usar" en este caso significa "usar el valor vinculado a" en lugar de "usar el constructo _Name". – Vatine

+0

Con "usar una variable" me refiero a hacer referencia en el código, y "usar un nombre de variable" me refiero a nombrarlo algo. –

Cuestiones relacionadas