2016-10-06 11 views
5

Void型が関数によって返されたときにそれを処理する最善の方法は何ですか? http://docs.julialang.org/en/release-0.5/manual/faq/#how-does-null-or-nothingness-work-in-juliaの提案は機能しません。Julia handling 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 

これはジュリア0.5である:

A MWEは(そうBase.source_dir()戻りVoid REPLから実行されなければなりません)。後者のオプションは機能しますが、少し醜いです。

答えて

7

Voidは、1つのインスタンスを持つタイプのシングルトンです。 その1つのインスタンスは、nothingとも呼ばれるVoid()です。 注意してくださいnothing === Void()

他の値と同じように扱うことができます。

printlnのような一連の関数によって返されます。

nothing - つまりVoidというインスタンスが返されているかどうかを確認できます。型安定性のために

julia> println()===nothing 
true 

、 ことで

方法は、時間の一部を時間の一部をnothingを返し、何かべきではありません。その場合は となり、代わりにNullable, が返されます。

+0

'==='を拡張することが可能であるため、通常は=== 'が推奨されます。 –

関連する問題