Julia 如何使用|>;和正确的模式匹配元组输入?

Julia 如何使用|>;和正确的模式匹配元组输入?,julia,Julia,我很难理解为什么下面的方法不起作用 (10, 10) |> ((a,b) -> a + b) 实际的用例要复杂得多,但我希望首先在Julia中理解这个简单的模式。管道操作符只支持单参数链接: """ |>(x, f) Applies a function to the preceding argument. This allows for easy function chaining. # Examples ```jldoctest julia> [1:5;

我很难理解为什么下面的方法不起作用

(10, 10) |> ((a,b) -> a + b)

实际的用例要复杂得多,但我希望首先在Julia中理解这个简单的模式。

管道操作符只支持单参数链接:

"""
    |>(x, f)

Applies a function to the preceding argument. This allows for easy function chaining.

# Examples
```jldoctest
julia> [1:5;] |> x->x.^2 |> sum |> inv
0.01818181818181818
```
"""
|>(x, f) = f(x)
(10,10)|>((a,b)->a+b)
等同于
((a,b)->a+b)((10,10))
,这在Julia中显然是非法的,因为它缺少一个飞溅操作符
((a,b)->a+b)((10,10)
,因此:

julia> (10, 10) |> x->((a,b) -> a + b)(x...)
20
((a,b)->a+b)
是两个参数的函数,而tuple
(10,10)
只是一个值。正如@gnimum所建议的,除了挥霍,您还可以在lambda中解压参数:

julia> (10, 10) |> (((a,b),) -> a + b)
20

但老实说,我觉得多余的逗号有点难看。

oops!看起来有人讨厌
|>
否决了这个答案免责声明:这在Julia中既不是一种常见的也不是很好的编码模式(它使代码很难阅读),而且我在实践中从未使用过它,但在某些特定的用例中可能是可以的。在实践中,人们可能更喜欢使用宏来创建语法糖。我更喜欢这个,因为它比@Gnimuc移动外部参数更简短、更容易理解:
(10,10)|>((a,b),)->a+b