On Oct 19, 2016 7:26 PM, "Alex Mellnik" <a.r.mell...@gmail.com> wrote:
>
> Here's my bizarre find of the day.  Most functions can be overwritten
without problems:
>
> function add7(i)
>     7 + i
> end
> Out[1]:
> add7 (generic function with 1 method)
> In [2]:
>
> add7(0)
> add7(0)
> Out[2]:
> 7
> In [3]:
>
> function add7(i)
>     9 + i
> end
> function add7(i)
>     9 + i
> end
> Out[3]:
> add7 (generic function with 1 method)
> WARNING: Method definition add7(Any) in module Main at In[1]:2
overwritten at In[3]:2.
> In [4]:
>
> add7(0)
> Out[4]:
> 9
>
> However, others can not:
>
> using DataFrames
> df = DataFrame(A=[1,2,3], B=["A", "B", "C"])
> println(df)
> 3×2 DataFrames.DataFrame
> │ Row │ A │ B   │
> ├─────┼───┼─────┤
> │ 1   │ 1 │ "A" │
> │ 2   │ 2 │ "B" │
> │ 3   │ 3 │ "C" │
> In [3]:
>
> row[:A] > 2
> function filter(row)
>     if row[:A] > 2
>         return 1
>     else
>         return 3
>     end
> end
> Out[3]:
> filter (generic function with 1 method)
> In [4]:
>
> [filter(row) for row in eachrow(df)]
> [filter(row) for row in eachrow(df)]
> Out[4]:
> 3-element Array{Int64,1}:
>  3
>  3
>  1
> In [5]:
>
> rand() > 0.5
> function filter(row)
>     if row[:A] > 2
>         return 2
>     else
>         return 4
>     end
> end
> WARNING: Method definition filter(Any) in module Main at In[3]:2
overwritten at In[5]:2
> Out[5]:
> filter (generic function with 1 method)
> .
> In [6]:
>
> [filter(row) for row in eachrow(df)]
> Out[6]:
> 3-element Array{Int64,1}:
>  3
>  3
>  1
>
> What is it about this second example that prevents the newer method from
being used?

Nothing about it but how you use it. It's inlined to the comprehension.

Reply via email to