2008-12-06 7 views
6

Ich habe vor kurzem Erlang gestartet, und ich merke, dass ich ständig "Warnung: Variable X ist nicht verwendet" beim Kompilieren bekommen. Nehmen wir zum Beispiel die folgende Funktion, die die maximale Element in einer Liste findet:Warnungen über nicht verwendete Variablen in 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. 

Der Compiler mir warnt davor, dass im dritten Fall der Funktion, Leiter nicht verwendet wird. Wie kann die Funktion ohne Kopf geschrieben werden?

Antwort

8

Dies sollte die Warnung, ohne verwirrend unterdrücken:

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. 

sollte es tun. Der Grund dafür ist, dass das Ersetzen von "Head" durch "_" eine Syntax ist, die besagt, dass ein Parameter dort platziert wird, aber ich brauche ihn nicht.

9

Wenn Sie nennen eine Variable _ statt Name (z _ statt Head) die Variable nicht gebunden sein, und Sie werden keine Warnung erhalten.

Wenn Sie eine Variable _Name statt Name nennen (zum Beispiel _Head statt Head) die Variable wird gebunden sein, aber Sie werden immer noch keine Warnung erhalten. Das Referenzieren einer Variablen beginnend mit _ im Code wird als sehr schlecht angesehen.

Es wird empfohlen, den Namen der Variablen beizubehalten, um die Lesbarkeit des Codes zu verbessern (z. B. ist es einfacher zu erraten, was _Head für nur _ vorgesehen war).

+1

Ihre letzten beiden Sätze widersprechen sich. –

+0

Ich vermute, "verwenden" in diesem Fall bedeutet "verwenden Sie den Wert gebunden an", anstatt "verwenden Sie das Konstrukt _Name". – Vatine

+0

Mit "eine Variable verwenden" meine ich, es im Code zu referenzieren, und "einen Variablennamen zu verwenden", ich meine, es etwas zu nennen. –

Verwandte Themen