julia - 如何在参数类型上定义参数类型?

标签 julia

假设我有类型

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{...} 表达式:期望的 Type{T},得到了 TypeVar

正确的做法是什么?

最佳答案

如错误所述,UTypeVar,而不是 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)

关于julia - 如何在参数类型上定义参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41453647/

相关文章:

julia - 如何在 Julia JuMP 中使用 VariableRef 作为索引

profiling - Julia:从代码中访问@time 计时和内存分配值

dataframe - 在 Julia 中与 @sync @async 并行

julia - 如何从 Julia 中的文件名中提取扩展名?

julia - 为什么 Julia> (1,2,3) 返回 (1,2,0)

Julia 内置函数求和数组?

dataframe - 无法在 DataFrames.jl 中执行列转换

julia - 元组的 StackOverflowError

julia - 如何使用户定义的函数描述 ("docstrings") 可用于 julia REPL?

julia - 可以对 Julia (julia-lang) 代码进行静态分析以避免运行时类型错误吗?