是否存在检查变量是 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()
与 nothing
和 Nothing
一起使用时会发生什么。
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)
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()
与 nothing
和 Nothing
一起使用时会发生什么。
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)