2016-11-17 32 views
5

追加一個元素在朱莉婭數組的數組是這樣的:朱莉婭:追加一個元素自定義類型

v = Array{Int32, 1}(0) 
append!(v, 1) 
append!(v, 2) 
println(v) # prints: Int32[1,2] 

當我嘗試這與自定義類型

type Node 
    label::String 
    value::Int32 
end 
nodes = Array{Node, 1}(0) 
append!(nodes, Node("a", 42)) 

我得到以下錯誤:

ERROR: LoadError: MethodError: no method matching length(::Node) 

我想我不得不「執行」的length方法,但不知道怎麼辦。

回答

8

append!命令不會做你所想它確實如此。您正在考慮push!命令。

append!命令附加兩個陣列在一起。這兩個參數必須是數組:

julia> append!(nodes, [Node("a", 42)]) 
1-element Array{Node,1}: 
Node("a",42) 

沒有length實施必要
(即誤差只是告訴你它試圖讀取您的數組作爲第二個參數的長度和發現的東西,這不是一個數組。 )

+0

或者,只要使用'push!',這看起來是你想要做的。 –

+0

有趣的是,'append!(v,1)'工作雖然...可能是爲了方便,但根據append!的文檔,它不應該......不確定這是否應該被報告爲錯誤或不... :) –

+0

嗯,我明白了,'append!(v,1)'起作用是因爲'length(1)'返回1。 ('length(x :: Number)= 1;'在第14行的numbers.jl中定義) –

1

試試這個

Base.append!(x::Array{Node,1}, val::Node) = push!(x, val) 

那麼你得到

append!(nodes, Node("a", 42)) 
1-element Array{Node,1}: 
Node("a",42) 

你必須明確地創建一個函數這一特定類型append!或任何Base功能有時(也許是我永遠沒有檢查)不會接受Any