如何在Julia中定义我们自己的类型?

如何在Julia中定义我们自己的类型?,julia,Julia,我已经尝试过struct方法,但它不能按照要求工作。您可以使用struct声明一个新的复合类型: 另请查看。假设您想要定义自己的圆类型,并且为了简单起见,您选择通过给定圆的半径和中心x、y来表示圆。。3D坐标遵循相同的定义模式。首先要决定的是,是否希望在创建圆后能够更改圆的某些值。假设您希望在创建后能够移动其中心 要创建具有可变字段值的类型,我们使用可变结构 要为我们的类型定义一个字段,我们给它一个名称并指定它的类型 为了构造类型的实现,我们使用了一个同名函数 然后 现在,我们可以做得更好,更整

我已经尝试过struct方法,但它不能按照要求工作。

您可以使用struct声明一个新的复合类型:


另请查看。

假设您想要定义自己的圆类型,并且为了简单起见,您选择通过给定圆的半径和中心x、y来表示圆。。3D坐标遵循相同的定义模式。首先要决定的是,是否希望在创建圆后能够更改圆的某些值。假设您希望在创建后能够移动其中心

要创建具有可变字段值的类型,我们使用可变结构 要为我们的类型定义一个字段,我们给它一个名称并指定它的类型 为了构造类型的实现,我们使用了一个同名函数 然后

现在,我们可以做得更好,更整洁,更清晰。我们可以选择定义二维点类型或三维点类型,并将其用于圆内的字段类型。一旦我们有了这种类型,你可能会想加入一些装饰

julia> circle1 = Circle(inv(2pi), 0.0, 0.0)
Circle(0.15915494309189535, 0.0, 0.0)

julia> circle2 = Circle(sqrt(2.0), 1.0, 1.0)
Circle(1.4142135623730951, 1.0, 1.0)

# and we can move the Circles
julia> circle2.xcoord = 0.0
julia> circle2.ycoord = 0.0
julia> circle2
Circle(1.4142135623730951, 0.0, 0.0)

# and we can change the radius if need be
julia> circle.radius = 1.0
julia> circle2
Circle(1.0, 0.0, 0.0)
你可以更清楚地表现出来

diameter(x::Circle) = 2 * x.radius
circumference(x::Circle) = pi * diameter(x)
然后

对于字段值不变的自定义类型,请遵循相同的模式,使用struct替换可变结构,忽略可变结构。当然,还有更先进的技术可以应用,请参见文档:


请随时提出任何后续问题。

请将代码放在这里。这是您可以查阅资源的软件用户手册的问题类型。
mutable struct Circle
    radius::Float64
    xcoord::Float64
    ycoord::Float64
end

circle1 = Circle(inv(2pi), 0.0, 0.0)
circle2 = Circle(sqrt(2.0), 1.0, 1.0)
julia> circle1 = Circle(inv(2pi), 0.0, 0.0)
Circle(0.15915494309189535, 0.0, 0.0)

julia> circle2 = Circle(sqrt(2.0), 1.0, 1.0)
Circle(1.4142135623730951, 1.0, 1.0)

# and we can move the Circles
julia> circle2.xcoord = 0.0
julia> circle2.ycoord = 0.0
julia> circle2
Circle(1.4142135623730951, 0.0, 0.0)

# and we can change the radius if need be
julia> circle.radius = 1.0
julia> circle2
Circle(1.0, 0.0, 0.0)
diameter(x::Circle) = 2 * x.radius
circumference(x::Circle) = pi * diameter(x)
Base.show(io::IO, x::Circle) =
   print(io, string("Circle(radius=",x.radius, " x=",x.xcoord, " y=",x.ycoord,")"))
julia> circle2
Circle(radius=1.4142135623730951 x=0.0 y=0.0)