Closed
Description
The sum of an empty, typed array is zero:
julia> sum(Int[])
0
julia> sum(Bool[])
0
Broadcasting over an empty array returns an empty array:
julia> (x -> 2x).(Int[])
0-element Array{Int64,1}
julia> Int[] .== 1
0-element BitArray{1}
So, as expected, summing over the above broadcasted operations returns zero:
julia> sum((x -> 2x).(Int[]))
0
julia> sum(Int[] .== 1)
0
However, if we perform the same operations using the sum(f, itr)
method, we get an ArgumentError
:
julia> sum(x -> 2x, Int[])
ERROR: ArgumentError: reducing over an empty collection is not allowed
Stacktrace:
[1] _empty_reduce_error() at ./reduce.jl:295
[2] mapreduce_empty(::Function, ::Function, ::Type{T} where T) at ./reduce.jl:334
[3] _mapreduce(::var"#7#8", ::typeof(Base.add_sum), ::IndexLinear, ::Array{Int64,1}) at ./reduce.jl:392
[4] _mapreduce_dim(::Function, ::Function, ::NamedTuple{(),Tuple{}}, ::Array{Int64,1}, ::Colon) at ./reducedim.jl:312
[5] #mapreduce#580 at ./reducedim.jl:307 [inlined]
[6] mapreduce at ./reducedim.jl:307 [inlined]
[7] _sum at ./reducedim.jl:657 [inlined]
[8] #sum#584 at ./reducedim.jl:653 [inlined]
[9] sum(::Function, ::Array{Int64,1}) at ./reducedim.jl:653
[10] top-level scope at REPL[8]:1
julia> sum(==(1), Int[])
ERROR: ArgumentError: reducing over an empty collection is not allowed
Stacktrace:
[1] _empty_reduce_error() at ./reduce.jl:295
[2] mapreduce_empty(::Function, ::Function, ::Type{T} where T) at ./reduce.jl:334
[3] _mapreduce(::Base.Fix2{typeof(==),Int64}, ::typeof(Base.add_sum), ::IndexLinear, ::Array{Int64,1}) at ./reduce.jl:392
[4] _mapreduce_dim(::Function, ::Function, ::NamedTuple{(),Tuple{}}, ::Array{Int64,1}, ::Colon) at ./reducedim.jl:312
[5] #mapreduce#580 at ./reducedim.jl:307 [inlined]
[6] mapreduce at ./reducedim.jl:307 [inlined]
[7] _sum at ./reducedim.jl:657 [inlined]
[8] #sum#584 at ./reducedim.jl:653 [inlined]
[9] sum(::Function, ::Array{Int64,1}) at ./reducedim.jl:653
[10] top-level scope at REPL[9]:1