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