Function 具有不同参数子类型的Julia函数
在Julia中,我可以定义一个函数,通过执行Function 具有不同参数子类型的Julia函数,function,types,julia,Function,Types,Julia,在Julia中,我可以定义一个函数,通过执行 function foo{T<:Type}(bar::T, arg::T) end 但是对于一个有多个参数的函数来说,它会变得相当麻烦。如果在T左侧使用的类型,我只需将其写成 function foo(bar::MyType, arg::MyType) ... end 在函数内部,如果需要具体类型,请使用typeof(bar)和typeof(arg)。这些是常量,因此不会影响性能 当然,我假设您的意思是类型是一些用户定义的类型,而不
function foo{T<:Type}(bar::T, arg::T) end
但是对于一个有多个参数的函数来说,它会变得相当麻烦。如果在
T左侧使用的类型,我只需将其写成
function foo(bar::MyType, arg::MyType)
...
end
在函数内部,如果需要具体类型,请使用typeof(bar)
和typeof(arg)
。这些是常量,因此不会影响性能
当然,我假设您的意思是类型
是一些用户定义的类型,而不是内置的类型
类型
即使参数是数组,函数也不需要参数化编写。这样做完全可以
function foo(bar::AbstractArray, arg::AbstractArray)
...
end
如果需要,在函数内部使用eltype(bar)
和eltype(arg)
。但是,如果需要eltype
s,我个人会使用参数化形式。仅提及,如果bar
或arg
的类型不是参数化的,则不需要使用参数化方法。e、 g.函数foo{T@GnimucK.我知道,但它们都是数组。我应该说得更具体些,但我实际上是在编写函数foo{T@Mauricio:是的,那么我更喜欢参数化方法。嗯,我认为重点是避免函数检查。此外,我不确定如何在不指定类型的情况下指定维度,或者我是否缺少一些明显的内容?您可以使用typealias
指定维度。但正如我在回答中所说,我更喜欢参数化形式>{TSo没有速记。悲哀。我真的在写函数foo{T}
function foo{T<:Type, U<:Type}(bar::T, arg::U) ... end
typealias FastInt Union{ Int32, Int64 } # division is fast
typealias SlowInt Union{ Int8, Int128 } # slightly slower
foo{T<:Integer}(a::T, b::T) ... end; # default/fallback
foo{T<:FastInt}(a::T, b::T) ... end; # specialized for fast types
foo{T<:SlowInt}(a::T, b::T) ... end; # specialized for slow types
function foo(bar::MyType, arg::MyType)
...
end
function foo(bar::AbstractArray, arg::AbstractArray)
...
end