2016-10-22 1 views
3

私は内部に配列を持つ型を作成しようとしていますが、問題があります。juliaの型の中にある配列

これは私のコードです:

type Gradient 
    color::GrandientPoint 
    Gradient(color=[]) = new(color) 
    function Gradient(rgb::RGB) 
     push!(color,GrandientPoint(rgb,0)) 
    end 
end 

私は私が間違って何をやっている

ERROR: UndefVarError: color not defined

このエラーを取得していますか?

答えて

8
function Gradient(rgb::RGB) 
    push!(color,GrandientPoint(rgb,0)) 
end 

あなたはここにcolorを作ったことがないので、あなたはそれが存在していないではないpush!colorにすることができるからです。実際、必要はありません。

function Gradient(rgb::RGB) 
    new(GrandientPoint(rgb,0)) 
end 

最初のフィールドに値GrandientPoint(rgb,0)を取得し、それを返しますGradientを行いますタイプを定義するには、あなたはそれのための値でnewを呼び出します。


あなたは配列を望んでいた場合は、あなたのタイプは

type Gradient 
    color::Vector{GrandientPoint} 
end 

だけではなくGraidentPointだろう。今度はそのコンストラクタを使ってそのベクトルを作ることができます。型には型の名前から分かりやすいコンストラクタがあります。したがって、Vector{GrandientPoint}を作成するには、

を入力してください。コンストラクタの完全なコード:

type Gradient 
    color::Vector{GrandientPoint} 
    Gradient(color=[]) = new(Vector{GradientPoint}()) 
    function Gradient(rgb::RGB) 
     color = Vector{GradientPoint}() 
     push!(color,GrandientPoint(rgb,0)) 
     new(color) 
    end 
end 
+0

しかし、それは配列になりますか?どのように要素を追加できますか? – exsnake

+0

正しく理解していれば、@exsnakeは 'Vector {GradientPoint}'を望んでいることに注意してください。 (したがって、 'new(color)'と 'color []'。) –

+0

ああ、それはタイトルをより理にかなっています。ええ、彼/彼女の元の問題のベクトルはありませんでした。私は、彼/彼女が望んでいた場合のために配列を含める答えを編集しました。 –

関連する問題