Pipe 在Julia中,如何将管道操作符与元组和匿名函数一起使用?
我试图将元组与管道操作符Pipe 在Julia中,如何将管道操作符与元组和匿名函数一起使用?,pipe,tuples,anonymous-function,julia,Pipe,Tuples,Anonymous Function,Julia,我试图将元组与管道操作符|>以及一个匿名函数(如 (1,2)|>(x,y)->x^2+y^2 但收到错误消息时: wrong number of arguments while loading In[59], in expression starting on line 1 in anonymous at In[59]:1 in |> at operators.jl:178 显然,(1,2)元组没有映射到(x,y) 经过一点尝试,我意识到我可以通过 (1,2)|>x->x[1]^2
|>
以及一个匿名函数(如
(1,2)|>(x,y)->x^2+y^2
但收到错误消息时:
wrong number of arguments
while loading In[59], in expression starting on line 1
in anonymous at In[59]:1
in |> at operators.jl:178
显然,(1,2)
元组没有映射到(x,y)
经过一点尝试,我意识到我可以通过
(1,2)|>x->x[1]^2+x[2]^2
但在某些情况下,后者不如前者优雅。如果我想将
(1,2)
映射到(x,y)
,那么语法应该是什么样的?在这种情况下,您将使用splat操作符
((x,y) -> x^2 + y^2)((1,2)...)
用流水线
julia> (1,2)... |> (x,y) -> x^2 + y^2
ERROR: MethodError: `|>` has no method matching |>(::Int32, ::Int32, ::Function)
所以可以扩展|>来处理两个参数
import Base.|>
|>(x,y,f) = f(x,y)
瞧
您可以为泛型函数
|>
定义一个新方法,该方法接受参数元组并将其映射到函数的形式参数,如下所示:
julia>Base.|>(xs::Tuple,f)=f(xs…)
|>(具有7种方法的通用函数)
朱莉娅:让我来
x=1
y=2
#只是胡闹。。。
(x,y)|>(x,y)->(2x,5y)|>
divrem>
复杂|>
x->(x.re,x.im)|>
divrem>
(x…)->[x…]|>
总和|>
浮动
结束
0
更一般的方法如何
|>(args…=args[end](args[1:end-1]…)
(1,2,3).|>(x,y,z)->x+y*z
计算结果为7
不过,广播有点尴尬:
[(1,2)、(3,4)]。|>x->x…|>(x,y)->x+y
编辑:
定义
import Base.|>
|>(args...) = args[end](args[1:end-1]...)
→(x, y) = |>(x..., y)
允许你写作
[(1,2)、(3,4)]。→ (x,y)->x+y
这是一个。
import Base.|>
|>(args...) = args[end](args[1:end-1]...)
→(x, y) = |>(x..., y)