我对 Julia 还很陌生,在尝试做某些事情时,我仍然对哪种风格更好有些怀疑……例如,我对使用抽象类型与定义联合的性能或风格差异有很多疑问。
一个例子:假设我们想要实现几种类型的单位(生物、骑士……),它们应该共享大部分(如果不是全部)属性和大部分(如果不是全部)方法。我看到提供结构的两种选择:第一,可以声明一个抽象类型AbstractUnit,其他类型派生自该抽象类型,然后为该抽象类型创建方法。它看起来像这样:
abstract type AbstractUnit end
mutable struct Knight <: AbstractUnit
id :: Int
[...]
end
mutable struct Peasant <: AbstractUnit
id :: Int
[...]
end
id(u::T) where T <: AbstractUnit = u.id
[...]
Run Code Online (Sandbox Code Playgroud)
或者,可以定义类型的联合并为该联合创建方法。它看起来像这样:
mutable struct Knight
id :: Int
[...]
end
mutable struct Peasant
id :: Int
[...]
end
const Unit = Union{Knight,Peasant}
id(u::Unit) = u.id
[...]
Run Code Online (Sandbox Code Playgroud)
我理解这两种方法之间的一些概念差异,并认为第一种方法更具可扩展性。然而,我对性能有很多疑问。AbstractUnit例如,在运行时的内存分配方面,创建联合类型的数组与创建联合类型的数组会有多糟糕?
谢谢!