Использование findall(x->typeof(x)==Nothing, A)
решает проблему, но может быть лучше использовать x->isa(x, T)
для некоторого типа T
.Причина этого заключается в том, что typeof(x)
не будет работать для абстрактных типов, поскольку typeof(x)
всегда возвращает конкретный тип.
Вот пример использования:
A = Any[1,UInt8(2),3.1,nothing,Int32(5)]
findall(x->isa(x, Int), A)
1-element Array{Int64,1}:
1
findall(x->isa(x, UInt8), A)
1-element Array{Int64,1}:
2
findall(x->isa(x, Integer), A) # Integer is an abstract type
3-element Array{Int64,1}:
1
2
5
findall(x->typeof(x)==Integer, A)
0-element Array{Int64,1} # <- Doesn't work!
Это также выглядит какбыстрее:
julia> @btime findall(x->typeof(x)==Nothing, $A)
356.794 ns (6 allocations: 272 bytes)
1-element Array{Int64,1}:
4
julia> @btime findall(x->isa(x, Nothing), $A)
120.255 ns (6 allocations: 272 bytes)
1-element Array{Int64,1}:
4