Types Julia嵌套类型初始化

Types Julia嵌套类型初始化,types,nested,initialization,julia,abstract,Types,Nested,Initialization,Julia,Abstract,我使用了下面的代码 abstract P0 type P1 <: P0 x::Float64 y::Int64 P1()=new() end type P11 <: P0 z::Int64 p::P1 P11()=new() end 我获得了P1型的#unde,如下所示: P11(2211879264,#undef) 如何正确初始化它?如果要对字段值实施约束或需要不完整的初始化,则只需要内部构造函数。后者就是您在这里所做的(请注意,不仅pp.p,而且

我使用了下面的代码

abstract P0

type P1 <: P0
  x::Float64
  y::Int64
  P1()=new()
end


type P11 <: P0
  z::Int64
  p::P1
  P11()=new()
end
我获得了P1型的#unde,如下所示:

P11(2211879264,#undef)

如何正确初始化它?

如果要对字段值实施约束或需要不完整的初始化,则只需要内部构造函数。后者就是您在这里所做的(请注意,不仅
pp.p
,而且
pp.z
都是未初始化的)

否则,最好使用外部构造函数,例如,为字段设置默认值。例如:

abstract P0

type P1 <: P0
  x::Float64
  y::Int64
end

P1() = P1(0.0, 0)

type P11 <: P0
  z::Int64
  p::P1
end

P11() = P11(0, P1())

P11() # returns P11(0,P1(0.0,0))
abstract P0

键入P1如果希望对字段值强制执行约束或需要不完整的初始化,则只需要内部构造函数。后者就是您在这里所做的(请注意,不仅
pp.p
,而且
pp.z
都是未初始化的)

否则,最好使用外部构造函数,例如,为字段设置默认值。例如:

abstract P0

type P1 <: P0
  x::Float64
  y::Int64
end

P1() = P1(0.0, 0)

type P11 <: P0
  z::Int64
  p::P1
end

P11() = P11(0, P1())

P11() # returns P11(0,P1(0.0,0))
abstract P0

输入P1我想要不完整的初始化。z是在我通过pp.z到达它时初始化的,同时我刚刚初始化了这两个,我的代码修改为:P11()=new(1,P1()),我的意思是我想先用一些值初始化它们,因为我将使用从文件读取的动态数组,我不希望初始化器与文件读取函数一起从类型定义中删除。对不起,我不明白。在原始代码中,
pp.z
只解释恰好位于其未初始化内存位置的随机位,因为该字段是
位类型。
P1
的字段也是如此。另一方面,
P11()。此外,
P11()=new(1,P1())
禁用默认构造函数,因此在我的回答中最好作为外部构造函数编写。感谢您的回答和信息。有没有一种方法可以使用p的值类型而不是像Swift的结构那样的引用类型?我不知道Swift,但是听起来你应该看看不可变的类型。我想要不完整的初始化。z是在我通过pp.z到达它时初始化的,同时我刚刚初始化了这两个,我的代码修改为:P11()=new(1,P1()),我的意思是我想先用一些值初始化它们,因为我将使用从文件读取的动态数组,我不希望初始化器与文件读取函数一起从类型定义中删除。对不起,我不明白。在原始代码中,
pp.z
只解释恰好位于其未初始化内存位置的随机位,因为该字段是
位类型。
P1
的字段也是如此。另一方面,
P11()。此外,
P11()=new(1,P1())
禁用默认构造函数,因此在我的回答中最好作为外部构造函数编写。感谢您的回答和信息。有没有一种方法可以使用p的值类型而不是像Swift的结构那样的引用类型?我不知道Swift,但是听起来你应该看看
不可变的
类型。