【发布时间】:2015-05-31 13:05:12
【问题描述】:
如何定义像 Array 这样具有具体/实例化类型参数的类型?我最初的直觉是它会是这样的:
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])
条形{1}([1,2,3])
Bar{0}([])
错误:条形参数 N 必须为正整数
虽然这解决了手头的问题,但我仍然想知道是否有一种方法可以预先指定类型参数的实例化类型,就像我在本文的初始代码片段中尝试做的那样?
【问题讨论】:
标签: types julia type-parameter