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,但是听起来你应该看看不可变的类型。