Haskells "sonst" ist ein Synonym für "_"?

8

Ich bin kürzlich auf einen Code gestoßen, der Haskells otherwise verwendet hat, um eine Übereinstimmung in einer Liste zu finden. Das kam mir seltsam vor, seit:

%Vor%

Also habe ich Folgendes versucht:

%Vor%

Ich habe es auch mit verschiedenen anderen Mustern verschiedener Typen versucht und mit -XNoImplicitPrelude aktiviert (um otherwise vom Geltungsbereich zu entfernen), und es funktioniert immer noch. Soll das passieren? Wo ist das dokumentiert?

    
YellPika 16.04.2015, 22:18
quelle

2 Antworten

16

Es entspricht nicht _ , es entspricht einem anderen Bezeichner. Wenn ein Bezeichner als Muster in Haskell verwendet wird, stimmt das Muster immer überein und der übereinstimmende Wert ist an diesen Bezeichner gebunden (im Gegensatz zu _ , wo es immer übereinstimmt, der übereinstimmende Wert jedoch verworfen wird).

Nur um es klar zu stellen: Der Bezeichner otherwise ist hier nicht besonders. Der Code hätte genauso gut x -> "!?" sein können. Da die Bindung niemals tatsächlich verwendet wird, wäre es sinnvoller, _ zu verwenden, um eine Warnung "unbenutzte Kennung" zu vermeiden und dem Leser zu verdeutlichen, dass der Wert keine Rolle spielt.

    
sepp2k 16.04.2015, 22:21
quelle
9
  

Nur weil noch niemand es gesagt hat, sonst soll es als Wächterausdruck verwendet werden, nicht als Muster. Fall ... von Pat | ... - & gt; ... | andernfalls - & gt; ... Jetzt ist seine Definition als wahr wichtig. - Reid Barton

Ein Beispiel:

%Vor%

Da otherwise True ist, wird dieser zweite Schutz immer erfolgreich sein.

Beachten Sie, dass die Verwendung von otherwise in einem Muster (im Gegensatz zu einem Wächter) die Leute wahrscheinlich verwirrt. Es wird auch eine Namensschattenwarnung ausgelöst, wenn GHC mit den entsprechenden aktivierten Warnungen ausgeführt wird.

    
dfeuer 17.04.2015 01:49
quelle

Tags und Links