如何在Julia中使用向量作为类型参数

时间:2014-10-12 21:36:32

标签: julia

这类似于我的previous question,但有点复杂。

在我定义一个带有关联整数作为参数的类型之前,Intp {p}。现在我想用vector作为参数来定义一个类型。

以下是我能写得最接近我想要的内容:

type Extp{g::Vector{T}}
     c::Vector{T}
end

换句话说,Extp应该相对于Vector,g来定义,我希望内容c是另一个Vector,其条目应该与g的条目具有相同的类型。

嗯,这不起作用。

问题1:我认为我不能在类型参数中使用::。

问题2:我可以通过制作g和c的类型来解决这个问题,并确保向量中的类型在构造函数中匹配。但是,即使我完全把所有东西拿出来并使用

type Extp{g}
     c
end

它似乎仍然不喜欢这个。当我尝试以我想要的方式使用它时,

  

朱莉娅> EXTP {[1,1,1]}([0,0,1])

     

错误:输入:apply_type:在Extp中,预期类型{T<:Top},得到数组{Int64,1}

那么,Julia不喜欢特定的Vector与类型相关联吗?我正在尝试做的只是使用整数,比如在我的Intp问题中吗?

编辑:在文档中,我看到类型参数“可以是任何类型(或者实际上是一个整数,但在这里它显然被用作类型)。”这是否意味着我所要求的是不可能的,并且类型和整数适用于Type参数?如果是这样,为什么? (通过这种方式,什么使得整数在Julia中比其他类型更特殊?)

2 个答案:

答案 0 :(得分:5)

在Julia 0.4中,你可以使用任何" bitstype"作为类型的参数。但是,向量不是bitstype,所以这不会起作用。最接近的模拟是使用元组:例如,(3.2, 1.5)是一个完全有效的类型参数。

在某种意义上,向量(或任何可变对象)与类型是对立的,它们在运行时不会改变。

答案 1 :(得分:2)

以下是relevant quote

  

抽象和具体类型都可以通过其他类型进行参数化   以及某些其他值(目前是整数,符号,bool和   它的元组)。

所以,你的编辑是正确的。扩展这一点已经出现在Julia问题页面上(例如,#5102#6081是我在一些讨论中发现的两个相关问题),所以这可能在将来发生变化 - 我猜不在{ {1}}但是。它必须是一个真正有意义的不可变类型,所以不是v0.4。我不确定我理解你的申请,但是Vector会有效吗?