Julia 如何理解“类函数对象”中一段代码的意思

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mifangdebaise/article/details/82891151

‘类函数对象’ 其实英文更容易理解 Function-like object,这里也是在 如何理解“类函数对象”中一段代码的意思 中解决了,这里总结一下:

在看 Julia 文档时,类函数对象中的这段代码该怎么理解呢

julia> struct Polynomial{R}
           coeffs::Vector{R}
       end

julia> function (p::Polynomial)(x)
           v = p.coeffs[end]
           for i = (length(p.coeffs)-1):-1:1
               v = v*x + p.coeffs[i]
           end
           return v
       end

julia> (p::Polynomial)() = p(5)

主要是

function (p::Polynomial)(x)
   ###
end

(p::Polynomial)() = p(5)

怎么理解?
应该这样理解:

Function-like object 翻译通俗一点是 “像函数一样的对象”,就是对象的实例可以像函数一样来调用,就像 C++ 里重载 () 算符,python 里的 call 一样,Julia 里是添加这么一个方法:

function (p::Polynomial)(x)
   ###
end

(p::Polynomial)() = p(5) # 实际上是下面的紧凑形式,相当于给一个没参数时的默认返回值为 p(5)
function (p::Polynomial)()
   p(5)
end

然后就可以实例化,调用了:

x = Polynomial(rand(10))
x(3)
x()

猜你喜欢

转载自blog.csdn.net/mifangdebaise/article/details/82891151
今日推荐