sun*_*ica 4 performance multiple-dispatch julia
在Julia中,fun(n::T) where T<:Integer当函数适用于所有子类型时,我经常看到代码编写Integer.但有时,我也看到fun(n::Integer),一些指南声称与上述相同,而其他人则认为效率较低,因为Julia并不专注于特定的子类型,除非明确提到子类型T.
后一种形式显然更方便,如果可能,我希望能够使用它,但这两种形式是否相同?如果没有,它们之间的实际差异是什么?
是BogumiłKamiński在他的评论中是正确的:f(n::T) where T<:Integer并且f(n::Integer)行为完全相同,除了前一种方法将T在其正文中定义名称.当然,在后一种情况下,您可以只显式分配T = typeof(n),它将在编译时计算.
还有一些其他情况下使用像这样的TypeVar是至关重要的,并且它可能值得称之为:
f(::Array{T}) where T<:Integer确实非常不同f(::Array{Integer}).这是常见的参数不变性问题(文档和另一个关于它的SO问题).f(::Type)将为所有s 生成一个专门化DataType.由于类型朱莉娅如此重要,该Type类型本身是特殊的,允许的参数一样Type{Integer},让您可以指定只的Integer类型.您可以使用f(::Type{T}) where T<:Integer要求Julia专门研究Type它作为参数的确切类型,允许Integer或其任何子类型.