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