比方说,我有一个n元组与Int64的4项uninitiallized。如何分别设置每个索引的值? 我尝试了base的setindex函数,但是没有用。有想法吗?
T = NTuple{4,Int64}
setindex(T,9,2) # set T(2) to 9
答案 0 :(得分:3)
您可能是说NTuple{4, Int64}
不是Ntuple{4, Int64}
。
NTuple
是表示具有单个类型元素的类型元组的紧凑方法(不是实际值,而是它们的类型;这里可能令人困惑的是,NTuple{4, Int64}
从技术上来说也是一个值可以绑定到变量,但这并不是您可能要执行的操作)。
您可以通过它查找帮助检查。在您的情况下,它表示长度为4的元组的类型,类型为Int64
的所有元素。例如(1,2,3,4)
是这样的元组。您可以通过编写(1,2,3,4) isa NTuple{4, Int64}
来进行检查,其结果将为true
。
现在,如果您问为什么像(1,2,3,4)
这样的元组不支持setindex!
的原因是在Julia中元组是不可变的,请参见https://docs.julialang.org/en/latest/manual/types/#Tuple-Types-1。这意味着必须在构造元组的每个字段时为其分配一个值,并且该字段不能被突变。
如果要使用可变容器,则可能应该考虑使用向量而不是元组。例如:
julia> x = Vector{Int}(undef, 4)
4-element Array{Int64,1}:
0
0
0
0
julia> x[2] = 9
9
julia> x
4-element Array{Int64,1}:
0
9
0
0