在朱莉娅,我能实现这种行为吗?
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
或类似的东西。
答案 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的答案中。