Julia 朱莉娅:将索引设置为N倍

Julia 朱莉娅:将索引设置为N倍,julia,Julia,假设我有一个NTuple,有4个未初始化的Int64条目。如何分别设置每个索引的值? 我尝试了base的setindex函数,但没有成功。有什么想法吗 T = NTuple{4,Int64} setindex(T,9,2) # set T(2) to 9 您可能是指NTuple{4,Int64}而不是NTuple{4,Int64} NTuple是表示具有单一类型元素的类型元组(不是实际值而是它们的类型;这里可能令人困惑的是,NTuple{4,Int64}在技术上也是一个可以绑定到变量的值,但鉴

假设我有一个NTuple,有4个未初始化的Int64条目。如何分别设置每个索引的值? 我尝试了base的setindex函数,但没有成功。有什么想法吗

T = NTuple{4,Int64}
setindex(T,9,2) # set T(2) to 9

您可能是指
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中是不可变的,请参见。这意味着您必须在构造元组时为元组的每个字段分配一个值,并且不能对其进行变异

如果你想要一个可变容器,你应该考虑使用向量而不是元组。例如:

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

您可能是指
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中是不可变的,请参见。这意味着您必须在构造元组时为元组的每个字段分配一个值,并且不能对其进行变异

如果你想要一个可变容器,你应该考虑使用向量而不是元组。例如:

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

^他们说了些什么,但如果你想找一个包含预先确定大小的快乐媒体,请看,特别是
MVector
s^他们说的,但是如果你想找一个包含预先确定大小的快乐媒体,请看,特别是
MVector
s