# Overload call to do multiplication on numbers?

**URL:** https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279
**Category:** General Usage
**Created:** [February 23, 2018, 1:16pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279 "2018-02-23T13:16:24Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [February 23, 2018, 1:16pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/1 "2018-02-23T13:16:24Z")

</div>

I really like the 2x syntax, and get tired of writing stars.

edit: actual example…

```julia
function (x::Float64)(y)
    x*y
end
a = 2.0
a(2+2)

```

That looks like a hilariously bad idea, but I can’t find any actual problems with this. Anything I missed?

---

<div class="post-metadata">

### Author: ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)
#### Post date: [February 23, 2018, 1:23pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/2 "2018-02-23T13:23:13Z")

</div>

This already works without that definition though:

```julia
julia> 2.0pi
6.283185307179586

julia> 2.0(2+2)
8.0

julia> 2.0sin(pi)
2.4492935982947064e-16

```

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [February 23, 2018, 1:31pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/3 "2018-02-23T13:31:30Z")

</div>

Sorry about that, I changed my example but didn’t test 🙂 What didn’t work without the definition was:

```julia
a = 2.0
a(2+2)

```

---

<div class="post-metadata">

### Author: ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)
#### Post date: [February 23, 2018, 1:38pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/4 "2018-02-23T13:38:31Z")

</div>

```julia
julia> pi(2+2)
ERROR: MethodError: objects of type Irrational{:π} are not callable

julia> a = 2
2

julia> a(2+2)
ERROR: MethodError: objects of type Int64 are not callable

```

But I get what you mean.

> [@antoine-levitt](#):
>
> but I can’t find any actual problems with this.

It looks like function call syntax, so for the examples above I would expect to call a function `pi` and `a` respectively.

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [February 23, 2018, 1:43pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/5 "2018-02-23T13:43:52Z")

</div>

Sorry again, I edited my second post (I should really wait to be on a computer before replying…)

My motivating example was writing `sin(2pi(x+y))` by accident and wondering if that could work.

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [February 23, 2018, 5:18pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/6 "2018-02-23T17:18:49Z")

</div>

It’s definitely doable, but it seems a bit dangerous. I wouldn’t want to have `sin = 666` somewhere and then write `sin(x + y)` later, thinking that I’m calling the `sin` function but actually just be multiplying `x + y` by the number of the beast.

---

<div class="post-metadata">

### Author: ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)
#### Post date: [February 23, 2018, 7:25pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/7 "2018-02-23T19:25:28Z")

</div>

I really like that in Mathematica `a b` Lowers to `a*b`. This would probably be horribly invasive and dangerous to implement in Julia but man would I love to be able to write `sin(2pi (x+y))` and have the space between `2pi` and `(x+y)` be understood as multiplication.

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [February 26, 2018, 8:30am UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/8 "2018-02-26T08:30:18Z")

</div>

That’s fair enough, this feature, while very cool, is also fairly dangerous. For those interested:

```julia
function build_subtypes(T)
    concretes = [t for t in subtypes(T) if isempty(subtypes(t))]
    abstracts = [t for t in subtypes(T) if !isempty(subtypes(t))]
    types = []
    append!(types, concretes)
    for t in abstracts
        append!(types, build_subtypes(t))
    end
    types
end

for T in build_subtypes(Number)
    @eval begin
        function (x::$T)(y)
            x*y
        end
    end
end

```

---

<div class="post-metadata">

### Author: ![Per](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/per/32/10387_2.png) [@Per](https://discourse.julialang.org/u/Per)
#### Post date: [February 26, 2018, 8:43am UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/9 "2018-02-26T08:43:30Z")

</div>

Space is already used as a separator in matrices, so `sin.([2pi (x+y)])` would be ambiguous…

---

<div class="post-metadata">

### Author: ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)
#### Post date: [February 26, 2018, 2:42pm UTC](https://discourse.julialang.org/t/overload-call-to-do-multiplication-on-numbers/9279/10 "2018-02-26T14:42:44Z")

</div>

Right, I had a feeling there was something that would straight up clash with spaces as multiplication. How could I forget row vectors and matrices!
