是否存在检查变量是 Nothing 还是 WhiteSpace 的方法?

Does a method exist to check if a variable is Nothing or WhiteSpace?

C#有String.IsNullOrWhiteSpace(String),我们有IsNothingOrWhiteSpace(String)吗?

我查了文档,好像没有,不过你可以自己写。

function IsNullOrWhiteSpace(verify::Any)
  # If verify is nothing, then the left side will return true.
  # If verify is Nothing, then the right side will be true. 
  return isnothing(verify) || isa(nothing,verify)
end 

function IsNullOrWhiteSpace(verify::AbstractString)
  return isempty(strip(verify))
end

println(IsNullOrWhiteSpace(nothing)) # true
println(IsNullOrWhiteSpace(" ")) # true

这可能不是最好的方法,但它确实有效。

为什么我们需要 isnothing()isa()

让我们看看当我们将 isnothing()nothingNothing 一起使用时会发生什么。

println(isnothing(nothing)) # true
println(isnothing(Nothing)) # false

我们明明要处理Nothing,怎么办呢?

使用isa(),它将测试nothing是否是Nothing的类型。

比其他答案稍微优雅的方法是充分使用多重分派:

isNullOrWS(::Type{Nothing}) = true
isNullOrWS(::Nothing) = true
isNullOrWS(verify::AbstractString) = isempty(strip(verify))
isNullOrWS(::Any) = false

这实际上也会产生更快的汇编代码。

julia> dat = fill(Nothing, 100);

julia> @btime isNullOrWS.($dat);
  174.409 ns (2 allocations: 112 bytes)

julia> @btime IsNullOrWhiteSpace.($dat);
  488.205 ns (2 allocations: 112 bytes)