我希望在将函数组合应用于值时避免使用括号。我提出了构建函数和值的想法:
julia> ∘(f::Function, x::Number)=f(x)
∘ (generic function with 2 methods)
julia> sqrt ∘ abs ∘ -2
1.4142135623730951
julia> sqrt ∘ abs ∘ (1-3)
1.4142135623730951
我的问题是如何声明x参数接受"值"这不是一个函数,因此它不会覆盖∘(f::Function, g::Function)
答案 0 :(得分:4)
撰写函数和值是什么意思?它可能意味着用恒定值进行缩放?例如sqrt ∘ abs ∘ x->-2x
(这会给你一个功能,而不是结果)。但是你想要做的只是将函数应用于一个值,在这种情况下,如果你真的讨厌括号,你可以编写-2 |> sqrt ∘ abs
。我同意你的意见,覆盖∘
不是一个好主意,因为它打破了功能组合的概念。
答案 1 :(得分:2)
我不知道这是不是一个好主意,但你可以使用它:
∘(f, g) = f(g) # define for all
∘{S<:Function,T<:Function}(f::S, g::T) = (x...)->f(g(x...)) # but not for fnc
修改:我想您不想重新定义功能的任何子类型的功能
edit2 :需要更大的重新定义
你不要避免括号:
sqrt ∘ abs ∘ (x->2x) ∘ 1