谁能通俗的解释一下function-like objects 啊

谁能通俗的解释一下function-like objects 啊。看了文档,还是不明白。
看样子像一个匿名函数。有什么不同啊?
还有p = 。。。
p(1)这个怎么理解?p是一个变量?

# code

要不文档地址给一下

是的,用的时候就跟一个函数一样。

用过Python不,就跟Python里的__call__方法的作用一样。

下面两段(并不十分可靠的)代码的功能类似,可以生成一个一次性的函数,但是利用funtion-like objects的方式来做的话结构会更清晰(当然不同的人有不同的审美…)

julia> function make_max_filter(maxval)
           function f(x::Number)
               return min(x, maxval)
           end
           f(x::AbstractArray) = f.(x)

           return f
       end
make_max_filter (generic function with 1 method)

julia> f = make_max_filter(5)
f (generic function with 2 methods)

julia> f(3)
3

julia> f(3:6)
4-element Array{Int64,1}:
 3
 4
 5
 5
julia> struct MaxFilter
           maxval::Float32
       end

julia> function (op::MaxFilter)(x::Number)
           min(x, op.maxval)
       end

julia> (op::MaxFilter)(x::AbstractArray) = op.(x)

julia> f = MaxFilter(5)
MaxFilter(5.0f0)

julia> f(3)
3.0f0

julia> f(3:6)
4-element Array{Float32,1}:
 3.0
 4.0
 5.0
 5.0

另外:采用functor方式设计代码的话,给其他人提供了扩展的可能性(只需要再额外加一条dispatch就好了)

1 个赞