我正在尝试创建一个内部包含数组的类型,但遇到了麻烦。
这是我的代码:
type Gradient
color::GrandientPoint
Gradient(color=[]) = new(color)
function Gradient(rgb::RGB)
push!(color,GrandientPoint(rgb,0))
end
end
我收到了这个错误
ERROR: UndefVarError: color not defined
我做错了什么?
最佳答案
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
关于arrays - Julia 类型内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40187958/