这类似于我的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中比其他类型更特殊?)
答案 0 :(得分:5)
在Julia 0.4中,你可以使用任何" bitstype"作为类型的参数。但是,向量不是bitstype,所以这不会起作用。最接近的模拟是使用元组:例如,(3.2, 1.5)
是一个完全有效的类型参数。
在某种意义上,向量(或任何可变对象)与类型是对立的,它们在运行时不会改变。
答案 1 :(得分:2)
以下是relevant quote:
抽象和具体类型都可以通过其他类型进行参数化 以及某些其他值(目前是整数,符号,bool和 它的元组)。
所以,你的编辑是正确的。扩展这一点已经出现在Julia问题页面上(例如,#5102和#6081是我在一些讨论中发现的两个相关问题),所以这可能在将来发生变化 - 我猜不在{ {1}}但是。它必须是一个真正有意义的不可变类型,所以不是v0.4
。我不确定我理解你的申请,但是Vector
会有效吗?