Julia> type Circle
ERROR: syntax: extra token "Circle" after end of expression
Stack trace:
[1] top-level scope at none:0
Run Code Online (Sandbox Code Playgroud)
我已经尝试过 struct 方法,但它没有按要求工作。
您可以使用以下命令声明新的(复合)类型struct:
julia> struct Circle end
julia> Circle()
Circle()
Run Code Online (Sandbox Code Playgroud)
假设您想要定义自己的Circle类型,并且选择通过给出圆的半径和圆心来表示圆((x, y)为简单起见。3D 坐标遵循相同的定义模式)。首先要决定的是您是否希望能够更改Circle曾经创建的某些值。假设您希望在创建后能够移动其中心。
mutable structmutable 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)
Run Code Online (Sandbox Code Playgroud)
然后
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)
Run Code Online (Sandbox Code Playgroud)
现在,我们可以做得更好(更整洁、更清晰)。我们可以选择定义 2D 点类型(或 3D 点类型),并将其用于Circle. 一旦我们有了这种类型,您可能想要加入一些装饰。
diameter(x::Circle) = 2 * x.radius
circumference(x::Circle) = pi * diameter(x)
Run Code Online (Sandbox Code Playgroud)
你可以更清楚地展示它
Base.show(io::IO, x::Circle) =
print(io, string("Circle(radius=",x.radius, " x=",x.xcoord, " y=",x.ycoord,")"))
Run Code Online (Sandbox Code Playgroud)
然后
julia> circle2
Circle(radius=1.4142135623730951 x=0.0 y=0.0)
Run Code Online (Sandbox Code Playgroud)
对于字段值不更改的自定义类型,请遵循相同的模式替换mutable struct为struct(省略mutable)。当然,还有更先进的技术可以应用,请参阅文档:
如果您有任何后续问题,请随时提出。