我想要一组元组。但似乎我不能附加一个元组。这是一个引发错误的最小代码示例。
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
我的语法有问题吗?我不明白为什么它抱怨它必须将数字转换为元组。是什么给了什么?
答案 0 :(得分: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)
单个项目元组(3, 3)
已成功推送到数组a
。
要使用append!
完成相同的任务,元组需要包含在某种类型的集合中,例如数组:
julia> append!(a, [(4, 4)])
4-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(2, 2)
(3, 3)
(4, 4)
这在档案页面here上有记录。