2016-11-17 9 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!コマンドは、2つのアレイを合わせてを追加します。どちらの引数は配列する必要があります。
必要を実装

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

length(そのエラーがちょうどそれが第二引数のためにあなたの配列の長さを読み込もうとしましたが、配列ではなかった何かを見つけたあなたを言っていました。 )

+0

または、ちょうどあなたがとにかくやっているようだと思われる 'push! 'を使ってください。 –

+0

「append!(v、1)」は便利ですが、便宜のためにそこにあるかもしれませんが、append!のドキュメントによれば、...バグかどうかは... :) –

+0

hm、 'append!(v、1)'は 'length(1)'が '1'を返すので動作します。 ( 'length(x :: Number)= 1;' numbers.jl行14で定義されています) –

1

この

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

が、その後、あなたが明示的に時々append!またはBase機能のいずれかとして、この特定の型の関数を作成(または、おそらく常にIするんだ

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

を取得してくださいあなたはチェックされていません)Any

関連する問題