julia中

时间:2016-10-22 03:16:55

标签: arrays types julia

我正在尝试制作一个内部有数组的类型,但却无法做到。

这是我的代码:

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

我收到此错误

  

错误:UndefVarError:颜色未定义

我做错了什么?

1 个答案:

答案 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