向后管道(即"< |")如何真正起作用?

时间:2016-03-25 00:52:53

标签: f# pipeline

我需要帮助了解"< |"表现如下代码:

Prop.forAll fiveAndThrees <| fun number ->

    let actual = transform number

    let expected = "FizzBuzz"
    expected = actual

文档说明如下:

  

将右侧表达式的结果传递给函数   在左侧(后向管道操作员)。

fiveAndThrees不是一个函数,而是一个值,它位于运算符的左侧。

我将上述定义解释为:

输入名为&#34; number&#34;并将其输入&#34;转换&#34;功能。但是,如果我们将右侧表达式的结果传递给左侧的函数,那么输入(即数字)何时以及如何实际初始化?

我只是没有看到它。

完整测试如下:

[<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() 

1 个答案:

答案 0 :(得分:4)

<|是一个比函数应用程序紧密绑定的运算符,所以

Prop.forAll fiveAndThrees <| fun number -> ...

被解析为

(Prop.forAll fiveAndThrees) <| fun number -> ...

Prop.forAll有两个参数,Arbitrary<T>和函数T -> Testable,因此Prop.forAll fiveAndThrees是右侧传递的函数。