如何定义一个类型,如Array,具有具体/实例化的类型参数?我最初的直觉是它会是这样的:
immutable Foo{N::Integer}
data::Array{Float64, N}
end
但是,这会产生以下错误:
错误:语法:格式错误的类型参数列表
以下代码可以接受:
immutable Foo{N}
data::Array{Float64, N}
end
Foo{1}([1,2,3])
富{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])
酒吧{1}([1,2,3])
Bar{0}([])
错误:条形参数N必须是正整数
虽然这解决了手头的问题,但我仍然有兴趣知道是否有预先指定类型参数的实例化类型的方法,因为我试图在此初始代码片段中执行此操作张贴?
答案 0 :(得分:1)
目前无法限制像这样的类型参数,尽管已经讨论过允许您在顶部尝试的语法。我相信您在内部构造函数中检查类型参数时提出的解决方案现在被认为是最佳实践。