JuliaLang/julia

unary `+` acts differently for `Array` and `AbstractArray`

Open

#58,295 opened on May 1, 2025

View on GitHub
 (7 comments) (2 reactions) (0 assignees)Julia (5,773 forks)batch import
arraysdesigngood first issue

Repository metrics

Stars
 (48,709 stars)
PR merge metrics
 (Avg merge 20d 6h) (157 merged PRs in 30d)

Description

(This issue is tangentially related to #58281.)

The return type of unary + with Bool argument is not the same for arrays and views:

julia> v = [true, false]; +v
2-element Vector{Int64}:
 1
 0

julia> w = view(v, :); +w
2-element view(::Vector{Bool}, :) with eltype Bool:
 1
 0

The reason is that unary + for AbstractArray is simply the identity map:

https://github.com/JuliaLang/julia/blob/748775b5689deaa4acac7929e0a31a80d1c564f4/base/abstractarraymath.jl#L285

Hence it misses the convention that + transforms Bool to Int.

Another consequence of this definition is that one doesn't know whether +v is identical to v for mutable v:

julia> v = [1, 2]; +v === v
false

julia> w = view(v, :); +w === w
true

In my opinion, it would be good to have a consistent answer. However, it may be to late for that.

Contributor guide