Джулия обрабатывает возвращаемый тип void

#julia

#Джулия

Вопрос:

Какой наилучший метод обработки Void типа, когда он возвращается функцией? Предложения в http://docs.julialang.org/en/release-0.5/manual/faq/#how-does-null-or-nothingness-work-in-julia не работай.

MWE (должен быть запущен из REPL, поэтому Base.source_dir() возвращает Void ):

 julia> isempty(Base.source_dir())
ERROR: MethodError: no method matching start(::Void)
Closest candidates are:
  start(::SimpleVector) at essentials.jl:170
  start(::Base.MethodList) at reflection.jl:258
  start(::IntSet) at intset.jl:184
  ...
 in isempty(::Void) at ./iterator.jl:3
 in isempty(::Void) at /Applications/Julia-0.5.app/Contents/Resources/julia/lib/julia/sys.dylib:?

julia> isdefined(Base.source_dir())
ERROR: TypeError: isdefined: expected Symbol, got Void

julia> typeof(Base.source_dir()) == Void
true
  

Это на Julia 0.5. Последний вариант работает, но он немного уродлив.

Ответ №1:

Void является синглтоном — типом, имеющим ровно один экземпляр. Этот экземпляр Void() также вызывается nothing . Имейте в виду, что nothing === Void()

Вы можете обрабатывать его так же, как и любое другое значение.

Он возвращается кучей функций, например println .

Вы можете проверить, вернулось ли что nothing -то — ie и экземпляр типа Void .

Автор:

 julia> println()===nothing
true
  

Ради стабильности типа
метод не должен возвращать nothing некоторое время и что-то время.
в этом случае вместо этого он должен возвращать a Nullable ,
как правило.

Комментарии:

1. === обычно рекомендуется, поскольку его можно расширять == странными способами.