Julia 我可以在函数定义中使用函数参数的子类型吗?

Julia 我可以在函数定义中使用函数参数的子类型吗?,julia,Julia,我想在函数定义中使用函数参数的子类型。这可能吗?例如,我想写一些类似于: g{T1, T2<:T1}(x::T1, y::T2) = x + y 我还有另一个类型,其抽象超类型定义如下 abstract MyAbstract type MyType <: MyAbstract ; end 现在我想在MyVectorType中放置一个MyType的实例。我可以这样做,因为MyType定义函数g{T,sf!{T1,t2f!(任意[1,2,3],4])的能力 “成功!” julia>f

我想在函数定义中使用函数参数的子类型。这可能吗?例如,我想写一些类似于:

g{T1, T2<:T1}(x::T1, y::T2) = x + y
我还有另一个类型,其抽象超类型定义如下

abstract MyAbstract
type MyType <: MyAbstract ; end

现在我想在
MyVectorType
中放置一个
MyType
的实例。我可以这样做,因为
MyType定义函数
g{T,sf!{T1,t2f!(任意[1,2,3],4])的能力
“成功!”
julia>f!(整数[1,2,3],4。)
错误:MethodError:没有与f!匹配的方法(::数组{Integer,1},::Float64)
最接近的候选人是:
f!{T1,T2
abstract MyAbstract
type MyType <: MyAbstract ; end
m1 = MyVectorType(Array(MyAbstract, 1))
f2!(m::MyVectorType, xNew) = (m.x[1] = xNew)
f3!{T1, T2}(m::MyVectorType{T1}, xNew::T2) = T2 <: T1 ? (m.x[1] = xNew) : error("Oh dear!")
f!{T}(A::Vector{T}, x::T) = (A[1] = x)
f!{T}(A::Vector{T}, x) = f!(A, convert(T, x))
julia> f!{T1, T2<:T1}(A::Vector{T1}, x::T2) = "success!"

julia> f!(Any[1,2,3], 4.)
"success!"

julia> f!(Integer[1,2,3], 4.)
ERROR: MethodError: no method matching f!(::Array{Integer,1}, ::Float64)
Closest candidates are:
  f!{T1,T2<:T1}(::Array{T1,1}, ::T2<:T1) at REPL[1]:1

julia> f!([1.,2.,3.], 4.)
"success!"