In general, you should avoid using `eval`. Is there a reason you don't want to pass in a function and make it `func::Function` in your type?
Your `eval` inside module `Bar` is evaluating the code inside the scope of `Bar`, which is what's causing your problem. -- Leah On Tue, Jul 29, 2014 at 3:58 PM, ggggg <[email protected]> wrote: > I'm trying to write a small module that allows one to define a Step that > describes operations on an HDF5 file. > > immutable Step > func::String > a_ins::(String...) #attribute inputs > d_ins::(String...) #dataset inputs > a_outs::(String...) #attribute outputs > d_outs::(String...) #dataset outputs > end > > The idea is to gather up the inputs specified by a_ins and d_ins, pass > them to the function specified by func, and place the outputs in HDF5 > datasets and attributes as specified by a_outs and d_outs. The issues I'm > having is finding the correct function given that it is defined in some > other Module. A minimal example is given by > > module Bar > bar(s::String, args...) = eval(parse(s))(args...) > export bar > end > using Bar > foo(s::String, args...) = eval(parse(s))(args...) > > baz(x...) = +(x...) > > baz(4,5,6) > foo("baz",4,5,6) > bar("baz",4,5,6) # ERROR: baz not defined > > One path I can see is that when I create the Step I could pass an actual > function to the constructor. If I knew how to access the fully qualified > name of the function, I could record that instead of just the name. I'm > not sure if that is possible. Any ideas on how I should approach this? > > Also I probably shouldn't be using eval(parse(s)) since that opens up the > opportunity for arbitrary code execution. >
