【发布时间】:2022-01-09 16:16:46
【问题描述】:
我对 Julia 很陌生,在尝试做某些事情时,我仍然对哪种风格更好有一些疑问......例如,我对使用抽象类型与定义的性能或风格差异有很多疑问工会。
一个例子:假设我们想要实现几种类型的单元(Mob、Knight、...),它们应该共享它们的大部分(如果不是全部)属性和大部分(如果不是全部)方法。
我看到提供结构的两个选项:首先,可以声明一个抽象类型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
[...]
或者,可以定义类型的联合并为联合创建方法。它看起来像这样:
mutable struct Knight
id :: Int
[...]
end
mutable struct Peasant
id :: Int
[...]
end
const Unit = Union{Knight,Peasant}
id(u::Unit) = u.id
[...]
我了解这两种方法之间的一些概念差异,并认为第一种方法更具可扩展性。但是,我对性能有很多疑问。例如,在运行时的内存分配方面,创建AbstractUnit 的数组与联合类型的数组会有多糟糕?
谢谢!
【问题讨论】:
标签: performance struct types julia