# Addition and UnitRange

**URL:** <https://discourse.julialang.org/t/addition-and-unitrange/34573>\
**Category:** General Usage\
**Tags:** question\
**Created:** [February 13, 2020, 2:04pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573 "2020-02-13T14:04:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [February 13, 2020, 2:04pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573/1 "2020-02-13T14:04:32Z")

</div>

Is there a reason, why `(1:23) * 2` works, but not `(1:23) + 2`?

---

<div class="post-metadata">

**Author:** ![oheil](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oheil/32/220745_2.png) [@oheil](https://discourse.julialang.org/u/oheil)\
**Post date:** [February 13, 2020, 2:15pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573/2 "2020-02-13T14:15:49Z")

</div>

Do you mean something like:

```julia
import base.+
+(r::UnitRange{Int64}, i::Int64)= (first(r)+i):(last(r)+i)

```

I don’t know if there is a reason 😉

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [February 13, 2020, 2:24pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573/3 "2020-02-13T14:24:30Z")

</div>

This is the same as

```julia
julia> [1,2] + 2
ERROR: MethodError: no method matching +(::Array{Int64,1}, ::Int64)

```

Just use broadcasting.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [February 13, 2020, 2:38pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573/4 "2020-02-13T14:38:13Z")

</div>

> [@oheil](#):
>
> I don’t know if there is a reason

The reason is the general one behind not defining “vectorized” versions of functions, which led to the introduction of broadcasting as the idiomatic solution.

This is better handled by broadcasting which has been customized to be efficient in this case (note the type of the result):

```julia
julia> (1:23) .+ 2
3:25

```

Also, what you are suggesting is technically type piracy.

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [February 13, 2020, 3:12pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573/5 "2020-02-13T15:12:16Z")

</div>

I see, makes sense, thanks :-).

~~The reason why the multiplication is implemented is probably due to the following~~ :

```julia
julia> (1:4) * 2
2:2:8

julia> (1:4) .* 2
2:2:8

julia> (1:4) .+ 2
3:6

```

EDIT: No, it doesn’t make sense that there is an extra multiplication implemented…

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [February 13, 2020, 3:48pm UTC](https://discourse.julialang.org/t/addition-and-unitrange/34573/6 "2020-02-13T15:48:23Z")

</div>

Multiplying a vector by a scalar is considered a meaningful operation on its own (eg in a [vector space](https://en.wikipedia.org/wiki/Vector_space#Definition)) so it has a method.
