Julia:实例化类型参数
Julia: Instantiated type parameters
如何定义像 Array 这样具有 concrete/instantiated 类型参数的类型?我最初的直觉是它会是这样的:
immutable Foo{N::Integer}
data::Array{Float64, N}
end
但是,这会产生以下错误:
ERROR: syntax: malformed type parameter list
可接受以下代码:
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])
Bar{1}([1,2,3])
Bar{0}([])
ERROR: Bar parameter N must be a positive integer
虽然这解决了手头的问题,但我仍然想知道是否有一种方法可以预先指定类型参数的实例化类型,就像我在此 post 的初始代码片段中尝试做的那样?
目前无法像这样限制类型参数,尽管已经讨论过允许您在顶部尝试过的语法。我相信您提出的在内部构造函数中检查类型参数的解决方案被认为是目前的最佳实践。
如何定义像 Array 这样具有 concrete/instantiated 类型参数的类型?我最初的直觉是它会是这样的:
immutable Foo{N::Integer}
data::Array{Float64, N}
end
但是,这会产生以下错误:
ERROR: syntax: malformed type parameter list
可接受以下代码:
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])
Bar{1}([1,2,3])
Bar{0}([])
ERROR: Bar parameter N must be a positive integer
虽然这解决了手头的问题,但我仍然想知道是否有一种方法可以预先指定类型参数的实例化类型,就像我在此 post 的初始代码片段中尝试做的那样?
目前无法像这样限制类型参数,尽管已经讨论过允许您在顶部尝试过的语法。我相信您提出的在内部构造函数中检查类型参数的解决方案被认为是目前的最佳实践。