Could you give some context and a more concrete description of what you're trying to do?
macro m1(ex) @show(ex) @show f1(ex) end function f1(ex) "M1.f1: $ex" end Do you want the macro m1 to expand into code that calls `M2.f1`? Or do you literally want the code in `m1` to call `M2.f1`, as in the example you gave? That would be an unusual request, but it could be done with multiple dispatch... On Saturday, February 6, 2016 at 6:39:49 AM UTC-5, Robert Feldt wrote: > > My feeling is that am missing something very basic here or that this has > been asked/misunderstood many times before. ;) But since I could find an > answer in my searches here goes: > > How can I reuse some parts of another module while re-implementing some of > it's lower-level functions (it uses internally)? In the example code below > I want to create a new module M2 which reuses (via import and then export) > a macro from another module M1 but re-implements a lower level f1 function > that is used in the implementation of m1. > > module M1 > export @m1 > macro m1(ex) > @show(ex) > @show f1(ex) > end > function f1(ex) > "M1.f1: $ex" > end > end > > a = 1 > M1.@m1 a + 1 # prints: f1(ex) = "M1.f1: a + 1" > > # I want to reuse @m1 but redefine the f1 it uses. > module M2 > import M1: @m1 > function f1(ex) > "M2.f1: $ex" > end > end > > M2.@m1 a + 1 # Not what I want, it still uses M1.f1 > > module M3 > import M1: @m1, f1 > function f1(ex) > "M3.f1: $ex" > end > end > > M3.@m1 a + 1 # What I want but gives warning that f1 in module M1 > overwritten > M1.@m1 a + 1 # and M1.@m1 is affected which can affect others... > > Is there a way I can import @m1 from M1 into my new module but force it to > call my newly defined f1? > Am I totally on the wrong track here and another "design" is better? > > I'd rather not fall back to copy-paste solutions here... > > Thanks, Robert > >
