关于结构体和类在Julia中的体现形式

查阅文档有constructors出现,里面也有struct关键字,但是和结构体感觉用法不是很一致。在文档中也没有找到与类相关的说明。不知道在julia是何种形式出现了,希望有高手指点一二。或者给出类似class或struct功能的语句也是非常欢迎与感激的。

具体是想了解什么?

哪里不一致?

和常规面向对象的语言是不一样,数据是可以用struct封装的,方法不可以,只能通过模块来include,再export来实现方法的封装。方法不属于实例,自然也就没有this和self的说法了。经过暗中观察本人是这样猜想的,不知道理解的对不对。

首先Julia的struct是复合类型,它差不多相当于一个不允许内置method的class(类似Python/C++)。

然后函数实际上是 generic function,其针对某个类型的实现称为method,例如

function foo end

这会产生一个拥有0个method的generic function。

如果你对某些类型实现了具体的 foo 方法,那么这个generic function就会拥有一个method。一个generic function 可以有很多method,这些method会根据你输入到一个 generic function里面的所有变量的类型进行派发(这称为多重派发)。

struct Foo
   a::Int
end

外部的 constructor 实际上是以类型为名称的 generic function的某个实现,比如你在外面实现一个 Foo(a::Float64) = Foo(Int(a)),其实是增加了一个新的 method。

内部的 constructor 可以使用 new 它会覆盖默认的 constructor,别的与普通函数应该没有很大不同。