我是OOP的新手。假设我有类似的类型和功能:
type Person
name::String
male::Bool
age::Float64
children::Int
end
function describe(p::Person)
println("Name: ", p.name, " Male: ", p.male)
println("Age: ", p.age, " Children: ", p.children)
end
ted = Person("Ted",1,55,0)
describe(ted)
有没有办法将describe函数嵌入到类型中。例如,如果我输入这样的东西
ted.describe()
我会得到:
Name Ted Male true
Age 55.0 Children 0
答案 0 :(得分:4)
我也是朱莉娅的新手,并且很久以前也有同样的要求。
现在我用以下代码解决您的问题,
感谢你的帮助
Understanding object-oriented programming in Julia – Objects-part 1
,
我知道一个匿名的功能不是很快,但我 认为开销对于“打印”功能来说并不算太糟糕。
#!/usr/bin/env julia
mutable struct Person
name::AbstractString
male::Bool
age::Float64
children::Int
describe::Function
function Person(name,male,age,children)
this = new()
this.name = name
this.male = male
this.age = age
this.children = children
# anonymous functions are not known to be fast ;-)
this.describe = function() describe(this) end
this
end
end
function describe(p::Person)
println("Name: ", p.name, " Male: ", p.male)
println("Age: ", p.age, " Children: ", p.children)
end
ted = Person("Ted",1,55,0)
# describe(ted)
ted.describe()
然而,正如0xMB所说:这不是朱莉娅的方式。 但是我喜欢用Ruby链接调用系统的方法, 因此,我希望有一天会出现一个语法学问题 轻松创建一些别名来创建这样的“成员函数”。
- 莫里斯
答案 1 :(得分:3)
朱莉娅不支持这种点符号。这可能不同于其他面向对象的语言,其中方法是对象的一部分,但Julia函数被认为通常对数据起作用,因此不在对象数据中定义。
你的例子很好。