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:
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?
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.
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.
Tags und Links haskell