gpt4 book ai didi

oop - Julia:了解 OOP 的多重分派(dispatch)

转载 作者:行者123 更新时间:2023-12-01 12:38:45 24 4
gpt4 key购买 nike

假设我有以下类型:

type cat
cry:: String
legs:: Int
fur:: String
end


type car
noise::String
wheels::Int
speed::Int
end


Lion = cat("meow", 4, "fuzzy")
vw = car("honk", 4, 45)

我想为它们添加一个方法 describe 来打印其中的数据。是否最好使用方法以这种方式进行:

describe(a::cat) = println("Type: Cat"), println("Cry:", a.cry, " Legs:",a.legs,  " fur:", a.fur);
describe(a::car) = println("Type: Car"), println("Noise:", a.noise, " Wheels:", a.wheels, " Speed:", a.speed)

describe(Lion)
describe(vw)

输出:

Type: Cat
Cry:meow Legs:4 fur:fuzzy
Type: Car
Noise:honk Wheels:4 Speed:45

或者我应该使用我之前发布的这个问题中的函数:Julia: What is the best way to set up a OOP model for a library

哪种方法效率更高?

documentation 中的大多数方法 示例是简单的函数,如果我想要一个更复杂的带有循环的 Method 或 if 语句,它们是可能的吗?

最佳答案

首先,我建议使用大写字母作为类型名称的第一个字母——这在 Julia 风格中是非常一致的,所以不这样做对于使用您的代码的人来说肯定很尴尬。

当你在做多语句方法时,你应该把它们写成完整的函数,例如

function describe(a::cat)
println("Type: Cat")
println("Cry:", a.cry, " Legs:", a.legs, " fur:", a.fur)
end
function describe(a::car)
println("Type: Car")
println("Noise:", a.noise, " Wheels:", a.wheels, " Speed:", a.speed)
end

通常,单行版本仅用于简单的单个语句。

可能还值得注意的是,我们正在制作一个函数和两个方法,以防手册中不清楚。

最后,您还可以向基础 Julia print 函数添加一个方法,例如

function Base.print(io::IO, a::cat)
println(io, "Type: Cat")
print(io, "Cry:", a.cry, " Legs:", a.legs, " fur:", a.fur)
end
function Base.print(io::IO, a::car)
println(io, "Type: Car")
print(io, "Noise:", a.noise, " Wheels:", a.wheels, " Speed:", a.speed)
end

(如果你调用println,它会在内部调用print并自动添加\n)

关于oop - Julia:了解 OOP 的多重分派(dispatch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946658/

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