朱莉娅:无法将元组附加到数组

tst*_*tst 4 arrays tuples julia

我想有一系列元组.但似乎我不能附加一个元组.这是一个引发错误的最小代码示例.

julia> a = [(1,1),(2,2)]
2-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 2)

julia> append!(a, (3,3) )
ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type Tuple{Int64,Int64}
This may have arisen from a call to the constructor Tuple{Int64,Int64}(...),
since type constructors fall back to convert methods.
Stacktrace:
 [1] _append!(::Array{Tuple{Int64,Int64},1}, ::Base.HasLength, ::Tuple{Int64,Int64}) at ./array.jl:644
 [2] append!(::Array{Tuple{Int64,Int64},1}, ::Tuple{Int64,Int64}) at ./array.jl:637
Run Code Online (Sandbox Code Playgroud)

我的语法有问题吗?我不明白为什么它抱怨它必须将数字转换为元组.是什么赋予了?

Ale*_*ley 7

append!将另一个集合的所有单个元素添加到现有对象.Julia在这里引发了错误,因为它(3, 3)是两个整数的集合,它无法将类型的单个整数Int64与数组的Tuple{Int64,Int64}类型进行协调.

您需要的方法是push!,将一个或多个单独的项添加到现有集合中:

julia> push!(a, (3, 3))
3-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 2)
 (3, 3)
Run Code Online (Sandbox Code Playgroud)

单个项目元组(3, 3)已成功推送到阵列上a.

要完成相同的任务append!,元组需要包含在某种类型的集合中,例如数组:

julia> append!(a, [(4, 4)])
4-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 2)
 (3, 3)
 (4, 4)
Run Code Online (Sandbox Code Playgroud)

这在此处的集合页面上有记录.