多个参数类型的多个调度

时间:2017-12-07 15:55:53

标签: julia

在朱莉娅,我能实现这种行为吗?

f(a::String, b::Int) = false
f(b::Int, a::String) = false
f(a::Int, b::Int) = a+b
f(a::String, b::String) = "woohoo!"

前两个函数使用参数类型?类似的东西:

f(a :: T,b :: S)其中{T!= S} = false

或类似的东西。

2 个答案:

答案 0 :(得分:4)

我认为这就是你要找的东西。朱莉娅总会派出最不明确的方法。

f(a::T,b::S) where {T,S} = T==S
f(a::T,b::T) where {T<:Number} = a+b
f(a::T,b::T) where {T<:String} = "woohoo!"

答案 1 :(得分:1)

允许对where语句中的类型执行的“计算”非常有限。基本上只是子类型,例如T<:AbstractFloat。如果你需要更复杂的类型计算,你可以查看@generated函数,但要注意有些人发疯并在其他技术更好的地方使用它们。以编译器可以推理的方式编写代码有编译时和代码大小的优点,例如在user2891936的答案中。