Thanks, after seeing https://github.com/JuliaLang/julia/issues/265#issuecomment-243056854 I have a better idea of what's going on and why it doesn't occur in 0.5.
On Wednesday, October 19, 2016 at 11:59:08 PM UTC-7, Yichao Yu wrote: > > > > On Wed, Oct 19, 2016 at 10:33 PM, Alex Mellnik <a.r.m...@gmail.com > <javascript:>> wrote: > >> Yichao, >> >> I'm afraid I'm not following -- could you expand on that a bit? Thanks, >> > > https://github.com/JuliaLang/julia/issues/265 > > >> >> Alex >> >> On Wednesday, October 19, 2016 at 4:41:30 PM UTC-7, Yichao Yu wrote: >> >>> On Oct 19, 2016 7:26 PM, "Alex Mellnik" <a.r.m...@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. >>> >>> >