辨析几种空值

未定义undef、空值nothing、缺失值missing、空数组,这几个有什么区别和适用范围吗?
如果初始化一个变量,令其为空,那么用上述哪种合适些?
如果中途空值化一个非空值变量,那么用上述哪种合适些?

有什么区别和适用范围吗

本来准备食用完有机物补充,现在看楼下那个回复吧

如果初始化一个变量,令其为空

nothing

如果中途空值化一个非空值变量

nothing

1 个赞
  • undef 用于矩阵的初始化 Array{Float64, 2}(undef, 4, 4) 直接使用分配的内存里原先的(垃圾)数据,不进行初始化
  • nothing 一般用于两种情况:1) 表明该函数没有返回值,2) 某个参数不设定默认值
  • missing 一般与概率统计有关,表明这个值是缺失的 (比如说一条统计记录里面某些值是缺失的)
  • 空矩阵 [] 在 Julia 下一般不用作空值这个概念 – 矩阵创建本身是有开销的

nothingmissing 具体的处理需要看工具箱内部的实现。


  1. 某个参数使用默认值
function f(A; r=nothing)
    r = isnothing(r) ? size(r) .÷ 2 : r
    ...
end

基本类似于 f(A; r=size(r).÷ 2) = ... 但在一些场景下确实是有用的,比如说需要处理更复杂的可选值的逻辑,甚至在某些情况下抛出一些 @warnerror 的话,那么放在函数签名里去做就显得太冗长和复杂了。

1 个赞

可以先直接 local x, 不赋值。

Ref 初始化的时候也比较常见

1 个赞