Types 朱莉娅:实例化的类型参数

Types 朱莉娅:实例化的类型参数,types,julia,type-parameter,Types,Julia,Type Parameter,如何定义一个像数组一样具有具体/实例化类型参数的类型?我最初的直觉是这样的: immutable Foo{N::Integer} data::Array{Float64, N} end 但是,这会产生以下错误: 错误:语法:格式错误的类型参数列表 以下代码是可接受的: immutable Foo{N} data::Array{Float64, N} end Foo{1}([1,2,3]) Foo{1}([1.0,2.0,3.0]) 但是我找不到任何关于限制参数N类型的说明。我意识到在

如何定义一个像数组一样具有具体/实例化类型参数的类型?我最初的直觉是这样的:

immutable Foo{N::Integer}
  data::Array{Float64, N}
end
但是,这会产生以下错误:

错误:语法:格式错误的类型参数列表

以下代码是可接受的:

immutable Foo{N}
  data::Array{Float64, N}
end
Foo{1}([1,2,3])
Foo{1}([1.0,2.0,3.0])

但是我找不到任何关于限制参数N类型的说明。我意识到在这种情况下,它可能不是严格必要的,但它肯定会提供更直观的错误消息,并且应该是可能的

编辑:

我找到了这样的部分解决方案:

immutable Bar{N}
  data::Array{Int64, N}
  Bar(dat) = (
    typeof(N) <: Integer && N > 0 ?
    new(dat) :
    error("Bar parameter N must be a positive integer"))
end

Bar{1}([1,2,3])
错误:条形图参数N必须是正整数


虽然这解决了手头的问题,但我仍然想知道是否有一种方法可以像我在本文的初始代码片段中尝试的那样预先指定类型参数的实例化类型?

目前不可能像这样限制类型参数,尽管已经讨论过允许您在顶部尝试的语法。我相信您提出的在内部构造函数中检查类型参数的解决方案现在被认为是最佳实践

Bar{0}([])