版权声明:本文为博主原创文章,未经博主允许不得转载。 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()