向后管道(即“<|”)是如何工作的?
How does the backwards pipeline (i.e. "<|") really work?
我需要帮助来理解“<|”针对以下代码的行为:
Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "FizzBuzz"
expected = actual
文档说明如下:
Passes the result of the expression on the right side to the function
on left side (backward pipe operator).
fiveAndThrees 不是一个函数而是一个值,它位于运算符的左侧。
我把上面的定义解释为:
获取名为 "number" 的输入并将其输入 "transform" 函数。但是,如果我们将右侧表达式的结果传递给左侧的函数,那么输入(即数字)何时以及如何实际初始化?
我就是没看到。
完整测试如下:
[<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()
<|
是一个运算符,其绑定不如函数应用程序紧密,因此
Prop.forAll fiveAndThrees <| fun number -> ...
被解析为
(Prop.forAll fiveAndThrees) <| fun number -> ...
Prop.forAll 有两个参数,一个 Arbitrary<T>
和一个函数 T -> Testable
所以 Prop.forAll fiveAndThrees
是一个传递给右边的函数。
我需要帮助来理解“<|”针对以下代码的行为:
Prop.forAll fiveAndThrees <| fun number ->
let actual = transform number
let expected = "FizzBuzz"
expected = actual
文档说明如下:
Passes the result of the expression on the right side to the function on left side (backward pipe operator).
fiveAndThrees 不是一个函数而是一个值,它位于运算符的左侧。
我把上面的定义解释为:
获取名为 "number" 的输入并将其输入 "transform" 函数。但是,如果我们将右侧表达式的结果传递给左侧的函数,那么输入(即数字)何时以及如何实际初始化?
我就是没看到。
完整测试如下:
[<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()
<|
是一个运算符,其绑定不如函数应用程序紧密,因此
Prop.forAll fiveAndThrees <| fun number -> ...
被解析为
(Prop.forAll fiveAndThrees) <| fun number -> ...
Prop.forAll 有两个参数,一个 Arbitrary<T>
和一个函数 T -> Testable
所以 Prop.forAll fiveAndThrees
是一个传递给右边的函数。