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.