如何在Julia中使用Null argumnet创建构造函数

如何在Julia中使用Null argumnet创建构造函数,julia,Julia,我想用参数类型族创建类型族,但我想用空参数创建可能性 type Family name:: AbstracDtring people:: Int dad:: Family mom:: Family Family(name:: AbstractString, people::Int ) = new (name, people , NULL, NULL) end 我可以用它做些什么吗?我想创建一个“对象”,引用另一个对象,或者不引用另一个对象。使用Nullab

我想用参数类型族创建类型族,但我想用空参数创建可能性

type Family
    name:: AbstracDtring
    people:: Int
    dad:: Family
    mom:: Family

Family(name:: AbstractString, people::Int ) = new (name, people , NULL, NULL)


end
我可以用它做些什么吗?我想创建一个“对象”,引用另一个对象,或者不引用另一个对象。

使用
Nullable
()


您可以使用较少的参数调用
new

type Family
    name::AbstractString
    people::Int
    dad::Family
    mom::Family

    Family(name::AbstractString, people::Int) = new(name, people)
end
您可以构造实例,但在分配
.dad
.mom
字段之前,访问它们将导致错误:

julia> fam = Family("Jones", 3)
Family("Jones",3,#undef,#undef)

julia> fam.dad
ERROR: UndefRefError: access to undefined reference
 in eval(::Module, ::Any) at ./boot.jl:225
 in macro expansion at ./REPL.jl:92 [inlined]
 in (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:46

julia> fam.mom
ERROR: UndefRefError: access to undefined reference
 in eval(::Module, ::Any) at ./boot.jl:225
 in macro expansion at ./REPL.jl:92 [inlined]
 in (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:46

julia> fam.dad = fam
Family("Jones",3,Family(#= circular reference @-1 =#),#undef)

julia> fam.mom
ERROR: UndefRefError: access to undefined reference
 in eval(::Module, ::Any) at ./boot.jl:225
 in macro expansion at ./REPL.jl:92 [inlined]
 in (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:46
您可以使用
isdefined
功能检查字段是否已定义:

julia> isdefined(fam, :dad)
true

julia> isdefined(fam, :mom)
false

Nullable
方法也很有效,但它的重量稍轻。

我很惊讶它能起作用。它也适用于
不可变的
吗?它也适用,但并不十分有用,因为在构造实例后,您无法将其分配给未定义的字段。
julia> isdefined(fam, :dad)
true

julia> isdefined(fam, :mom)
false