小编Jor*_*tes的帖子

Julia:抽象类型与类型联合

我对 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例如,在运行时的内存分配方面,创建联合类型的数组与创建联合类型的数组会有多糟糕?

谢谢!

performance struct types julia

5
推荐指数
1
解决办法
923
查看次数

标签 统计

julia ×1

performance ×1

struct ×1

types ×1