假设我有类型
immutable X{T}
a::T
end
immutable Y{T}
a::T
end
我想做点什么
type A{T, U}
x::U{T}
y::T
end
这样的实例可以是A(X(a), a)
或A(Y(a), a)
它不起作用
LoadError: TypeError: Type{...} expression: expected Type{T}, got TypeVar
它的正确方法是什么?
答案 0 :(得分:3)
正如错误所述,U
是TypeVar
,而不是Type
。答案是让U
成为真正的类型:
julia> abstract U{T}
julia> immutable X{T} <: U{T}
a::T
end
julia> immutable Y{T} <: U{T}
a::T
end
julia> type A{T}
x::U{T}
y::T
end
julia> A(X(1),1)
A{Int64}(X{Int64}(1),1)
julia> A(X(1),1.)
ERROR: MethodError: no method matching A{T}(::X{Int64}, ::Float64)
Closest candidates are:
A{T}{T}(::U{T}, ::T) at REPL[4]:2
A{T}{T}(::Any) at sysimg.jl:53
julia> A(Y(1),1)
A{Int64}(Y{Int64}(1),1)