2017-07-24 2 views

Antwort

6

Dies ist eine Kombination von Eindruck unter match und Sonderfall für Betreiber.

Zuerst, unter match, kann der Körper von jedem Fall so weit links wie die vertikale Linie beginnen. Zum Beispiel, das funktioniert:

match 5 with 
| x -> 
"some value" 

Zweitens gibt es eine spezielle Offset-Regel für die Betreiber, die am Anfang einer neuen Zeile angezeigt werden: solche Operatoren links von der vorherige Zeile bis zur Breite sein können des Bedieners plus eins. Beispielsweise arbeiten diese alle gleich:

let x = 
    "abc" 
    |> printf "%s" 

let y = 
     "abc" 
    |> printf "%s" 

let z = 
"abc" 
    |> printf "%s" 

Also, in Ihrem zweiten Beispiel ist der zweite Fall der match umfasst die printfn Linie, weil die Vorlaufleitung Betreiber innerhalb der akzeptablen Toleranz nach links von Anfang an ist der die erste Zeile.

enter image description here

Wenn Sie die Zeichenfolge "value is non-negative" nur zwei Stellen nach rechts bewegen, wird das vordere Rohr nicht mehr innerhalb der Toleranz, und so die printfn Linie wird als außerhalb des Spiels interpretiert werden.

match 5 with 
| k when k < 0 -> 
    "value is negative" 
| k -> 
    "value is non-negative" 
|> printfn "%s" 

In Ihrem ersten Beispiel wird es 5 Plätze nach rechts verschoben, so dass das auch funktioniert.

+6

Dies ist, aus Versehen, ein gutes Argument für das Einrücken von 4 Leerzeichen routinemäßig: Weil Einrücken um 2 Leerzeichen oft auf dieses Problem stoßen, aber Einrücken um 4 Leerzeichen kann nur in dieses Problem führen, wenn der Operator in der nächsten Zeile ist mindestens drei Zeichen lang wie '> =>'. Nicht, dass der 4-Platz-Einzug * völlig * frei von dem Problem wäre: Operatoren wie '> =>' und '>> =' werden schließlich allgemein verwendet. Aber sie sind weit weniger verbreitet als '|>', was Probleme mit dem Einrücken von 2 Leerzeichen, aber nicht mit 4 verursacht. – rmunn

+0

Hat jemand jemals Code gesehen, der in den Stil "eingerückte Operatoren" geschrieben wurde, den diese Regel zulässt? Ich habe nur gesehen, dass es Probleme verursacht. – Tarmil

+0

@Tarmil es funktioniert wirklich gut für die Anwendung von Operatoren zwischen mehreren gleichwertigen Argumenten. Stellen Sie sich eine Summe von zehn Ausdrücken vor, wobei jeder Ausdruck lang genug ist, um in einer eigenen Zeile zu stehen. Sie möchten die Ausdrücke direkt aneinander ausrichten, um die Tatsache widerzuspiegeln, dass sie alle gleich sind, niemand ist wichtiger als die anderen. –

Verwandte Themen