假设我有以下类型:
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中的大多数Methods
示例都是简单的函数,如果我想要一个更复杂的Method
循环或if语句是否可能?
答案 0 :(得分:3)
首先,我建议使用大写字母作为类型名称的第一个字母 - 这在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