gpt4 book ai didi

julia - 在 Julia 中创建非常相似的类型

转载 作者:行者123 更新时间:2023-12-04 16:58:53 26 4
gpt4 key购买 nike

假设我有两种类型,它们都是抽象类型的子类型

abstract A

type B <: A
x
y
z
end

type C <: A
x
y
z
w
end

有什么方法可以创建 C无需基本上复制/粘贴 B并添加额外的参数?主要问题是 BC非常接近,我希望尽可能少的代码重复。我知道手册说具体类型不能相互子类型化:

One particularly distinctive feature of Julia’s type system is that concrete types may not subtype each other: all concrete types are final and may only have abstract types as their supertypes.



有没有办法解决?

最佳答案

在这些情况下,我通常更喜欢组合我的类型。

这是我的意思的一个例子:

abstract A

type B <: A
x
y
z
end

type C <: A
b::B
w
end

注意如何 C仍然是 A 的亚型,但包含 B 的实例作为一个领域。

更新

确实无法再访问 c.x ,而是你必须做 c.b.x .有一个简单的方法可以解决这个问题。

假设你有一个函数
function my_func(a::A)
# do something with a.x, a.y, a.z
end

my_func应该适用于 A 的任何子类型,它只能访问在 A 的所有子类型中通用的字段。 .在这种情况下是 x , y , 和 z .

知道了这一点,我还将定义该方法的一个专门版本来调度 C 的实例。如下:
my_func(c::C) = my_func(c.b)

这有点冗长,但您可以轻松地将所有这些函数包装在使用 @eval 的元编程 for 循环中。并一次性生成它们。见 docs欲了解更多信息

关于julia - 在 Julia 中创建非常相似的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com