Dav*_*ers 40
如有疑问,请阅读文档......
https://docs.julialang.org/en/v1/manual/types/#Composite-Types-1
长话短说:
struct MyType
a::Int64
b::Float64
end
x = MyType(3, 4)
x.a
Run Code Online (Sandbox Code Playgroud)
编辑:方法在类型定义之外定义,例如
function double(x::MyType)
x.a *= 2
end
Run Code Online (Sandbox Code Playgroud)
例如,方法不会存在于类型中,就像在C++或Python中一样.这允许Julia的一个关键特性(多重调度)也可以与用户定义的类型一起工作,这些类型与系统定义的类型完全相同.
Chr*_*kas 28
Julia并不是完全意义上的面向对象,因为你无法将方法附加到Julia的对象("类型").这些类型看起来与对象非常相似.但是,由于它们没有自己的关联方法,并且没有继承,因此对象本身不会执行操作.相反,你有作用于对象的功能.
不同的是ball.checkCollision()vs checkCollision(ball,Walls).实际上,这并不是什么大不了的事.你可以通过让一个类型具有另一种类型的字段来创建类似继承的东西,并且多个调度允许你根据你给它们的对象编写执行不同事物的函数,这几乎就像对象方法.真正的区别在于您将函数和类型保存在文件中.所以你可以在Julia中做一种准反对导向的风格,但它仍然与OOP语言截然不同.
Rez*_*lan 11
我想在Julia用户组Julia和面向对象编程中提到这个有价值的对话.
对我来说,Julia不像传统的OO语言,我总是喜欢将Julia视为面向对象语言的面向方法语言,这是因为如果您尝试在Julia中创建封装数据和功能的结构,很快你就会陷入麻烦.
小智 6
答案是 Julia 更接近 c 而不是 c++。因此,OOP 在 Julia 中受到限制,只有 c::struct 而不是 c++::class。因此,严格来说,它只是数据封装或数据结构或类型的定制,而不是真正的 OOP 对象。