Мне нужна помощь, чтобы понять, как «< |» ведет себя на следующий код:Как работает обратный конвейер (т. Е. «<|»)?
Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "FizzBuzz"
expected = actual
В документации говорится следующее:
Передает результат выражения справа от функции на левой стороне (в обратном направлении оператора трубы).
5AndThrees не является функцией, а вместо этого значением, а в левой части оператора.
интерпретировать приведенное выше определение, как:
Возьмите вход под названием «номер» и кормить его в функцию «преобразования». Однако, если мы передаем результат выражения с правой стороны в функцию слева, то когда и как элемент ввода (т. Е. Число) действительно инициализируется?
Я просто не вижу его.
Полный тест состоит в следующем:
[<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
Функция для проверки состоит в следующем:
let transform number =
match number % 3, number % 5 with
| 0, 0 -> "FizzBuzz"
| _, 0 -> "Buzz"
| 0, _ -> "Fizz"
| _ -> number.ToString()
См. Http://blog.ploeh.dk/2016/03/01/ad-hoc-arbitraries-now-with-pipes –