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?