# Behavior of Base.maximum

**URL:** <https://discourse.julialang.org/t/behavior-of-base-maximum/30961>\
**Category:** New to Julia\
**Created:** [November 11, 2019, 4:00pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961 "2019-11-11T16:00:30Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![guberger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/guberger/32/11553_2.png) [@guberger](https://discourse.julialang.org/u/guberger)\
**Post date:** [November 11, 2019, 4:00pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961/1 "2019-11-11T16:00:30Z")

</div>

Hello! The following piece of code (example) prints 10 while I would have expected 5:

```julia
for i = 1:1
    it = 1:5
    f(t) = t
    b = maximum(f, it)
    f(t) = 2*t
    display(b)
end

```

Does someone have an explanation for that behavior? Thanks

---

<div class="post-metadata">

**Author:** ![braamvandyk](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/braamvandyk/32/5086_2.png) [@braamvandyk](https://discourse.julialang.org/u/braamvandyk)\
**Post date:** [November 11, 2019, 4:15pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961/2 "2019-11-11T16:15:54Z")

</div>

You may need looking for ‘argmax’, which returns the index of the largest element.

---

<div class="post-metadata">

**Author:** ![braamvandyk](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/braamvandyk/32/5086_2.png) [@braamvandyk](https://discourse.julialang.org/u/braamvandyk)\
**Post date:** [November 11, 2019, 4:17pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961/3 "2019-11-11T16:17:22Z")

</div>

Actually, no. Ignore my comments.

---

<div class="post-metadata">

**Author:** ![ExpandingMan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/expandingman/32/866_2.png) [@ExpandingMan](https://discourse.julialang.org/u/ExpandingMan)\
**Post date:** [November 11, 2019, 4:19pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961/4 "2019-11-11T16:19:29Z")

</div>

When you declare functions like `f(x) = y` this creates a global binding to `f` in the module as soon as it gets compiled (likewise when you declare functions with `function`). What you want are “anonymous functions”

```julia
f = t -> t
f = t -> 2t

```

It’s unfortunate that this distinction exists, but my understanding is that it would vastly complicate the compiler to fix it.

---

<div class="post-metadata">

**Author:** ![robsmith11](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/robsmith11/32/29641_2.png) [@robsmith11](https://discourse.julialang.org/u/robsmith11)\
**Post date:** [November 11, 2019, 4:28pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961/5 "2019-11-11T16:28:25Z")

</div>

As @ExpandingMan said, a solution is to use anonymous functions. See here and the linked issue for more details:

> [@Local function redefinition: feature or bug?](https://discourse.julialang.org/t/local-function-redefinition-feature-or-bug/10158):
>
> For the followed function, t() will output 12 in Julia0.4 and output 22 since Julia0.5. Is that a feature or bug? Anyway, it looks strange to output 22 and cause a hard bug after I upgrade my some old Julia code from 0.4 to 0.6. function t() f()=1 print(f()) f()=2 print(f()) end

---

<div class="post-metadata">

**Author:** ![guberger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/guberger/32/11553_2.png) [@guberger](https://discourse.julialang.org/u/guberger)\
**Post date:** [November 11, 2019, 4:46pm UTC](https://discourse.julialang.org/t/behavior-of-base-maximum/30961/6 "2019-11-11T16:46:09Z")

</div>

Ok got it. Thanks!
