Julia处理void返回类型

时间:2016-10-06 00:24:45

标签: julia

当函数返回Void类型时,处理Base.source_dir()类型的最佳方法是什么? http://docs.julialang.org/en/release-0.5/manual/faq/#how-does-null-or-nothingness-work-in-julia中的建议不起作用。

MWE(必须从REPL运行,以便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 ):

                MemoryStream ms = new MemoryStream();
                Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
                panel1.DrawToBitmap(bmp, panel1.Bounds);
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] Pic_arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(Pic_arr, 0, Pic_arr.Length);
                ms.Close();

这是Julia 0.5。后一种选择有效,但它有点难看。

1 个答案:

答案 0 :(得分:8)

Void是一个单例 - 只有一个实例的类型。 那个实例Void()也称为nothing。 请注意nothing === Void()

您可以像对待任何其他值一样对待它。

它由一系列函数返回,如println

您可以检查某些内容是否已返回nothing - 即Void类型的实例。

通过

julia> println()===nothing
true

为了类型稳定性, 一个方法不应该在某些时候返回nothing,而在某些时候也不应该返回。 在这种情况下,它应该返回Nullable, 一般