Ich brauche Hilfe zu verstehen, wie "< |" der folgende Code verhält sich für:Wie funktioniert die Rückwärts-Pipeline (d. H. "<|") Wirklich?
Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "FizzBuzz"
expected = actual
Die Dokumentation sagt der folgende:
leitet das Ergebnis des Ausdrucks auf der rechten Seite auf die Funktion auf der linken Seite (Rückwärts-Rohrführung).
fiveAndThrees ist keine Funktion, sondern ein Wert, und es ist auf der linken Seite des Operators.
interpretiere ich die obige Definition als:
eine Eingabe aufgerufenen Funktion Take „Nummer“ und ihn in die „transformieren“. Wenn wir jedoch das Ergebnis des Ausdrucks auf der rechten Seite an die Funktion auf der linken Seite übergeben, dann wann und wie wird die Eingabe (d. H. Nummer) tatsächlich initialisiert?
Ich sehe es einfach nicht.
Der vollständige Test ist folgende:
[<Fact>]
let ``FizzBuzz.transform returns FizzBuzz``() =
let fiveAndThrees = Arb.generate<int> |> Gen.map ((*) (3 * 5))
|> Arb.fromGen
Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "FizzBuzz"
expected = actual
Die Funktion getestet werden, ist die folgende:
let transform number =
match number % 3, number % 5 with
| 0, 0 -> "FizzBuzz"
| _, 0 -> "Buzz"
| 0, _ -> "Fizz"
| _ -> number.ToString()
Siehe http://blog.ploeh.dk/2016/03/01/ad-hoc-arbitraries-now-with-pipes –