如何在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