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



这与我之前的问题类似,但有点复杂。

在我定义一个以关联整数作为参数的类型之前,Intp{p}。现在我想定义一个使用向量作为参数的类型。

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

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

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

这不管用。

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

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

type Extp{g}
     c
end

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

julia>Extp{[1,1,1]}([0,0,1])

错误:type:apply_type:在Extp中,应为type{T<:Top},得到Array{Int64,1}

那么,Julia就是不喜欢特定的矢量与类型相关联吗?我想做的事情只适用于整数吗,就像我的Intp问题一样?

编辑:在文档中,我看到类型参数";可以是任何类型(实际上,也可以是整数,尽管这里明确将其用作类型)"这是否意味着我所问的是不可能的,并且只有类型和整数适用于Type参数?如果是,为什么?(是什么让整数以这种方式比Julia中的其他类型更特殊?)

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

从某种意义上说,向量(或任何可变对象)与类型是对立的,在运行时无法更改。

以下是相关报价:

抽象类型和具体类型都可以由其他类型参数化以及某些其他值(当前为整数、符号、布尔值和其元组)。

因此,您的EDIT是正确的。Julia问题页面上出现了扩大这一范围的问题(例如,#5102和#6081是我在一些讨论中发现的两个相关问题),所以这一点在未来可能会改变——不过我猜v0.4中不会。它必须是一个真正有意义的不可变类型,所以不是Vector。我不确定我是否理解您的申请,但Tuple是否可行?

最新更新