我正在尝试制作一个内部有数组的类型,但却无法做到。
这是我的代码:
type Gradient
color::GrandientPoint
Gradient(color=[]) = new(color)
function Gradient(rgb::RGB)
push!(color,GrandientPoint(rgb,0))
end
end
我收到此错误
错误:UndefVarError:颜色未定义
我做错了什么?
答案 0 :(得分:8)
function Gradient(rgb::RGB)
push!(color,GrandientPoint(rgb,0))
end
您从未在此处color
,因此您不能push!
进入color
,因为它不存在。实际上,你不需要。要定义类型,只需使用其值调用new
:
function Gradient(rgb::RGB)
new(GrandientPoint(rgb,0))
end
使Gradient
第一个字段获得值GrandientPoint(rgb,0)
,并将其返回。
如果你想要一个数组,那么你的类型将是
type Gradient
color::Vector{GrandientPoint}
end
不仅仅是GraidentPoint。现在,您可以使用其构造函数创建该向量。类型具有类型名称的合理构造函数。所以要制作Vector{GrandientPoint}
,你只需要做
Vector{GraidentPoint}()
你可以把东西推进那里。构造函数的完整代码:
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