【问题标题】:Julia: Instantiated type parametersJulia:实例化类型参数
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      相关资源
      最近更新 更多