I think this will work: for (fn, arg) = ((:toucha, "a"), (:touchb, "b")) > cmd = `touch $arg` > @eval $fn() = run($cmd) > end
On Fri, May 13, 2016 at 7:34 AM, Andrew Gibb <[email protected]> wrote: > I'm trying to use metaprogramming to create two functions. Each of which > includes a similar, long, call to run(). The calls are not quite identical. > Some flags have different arguments, and some are only present on one call. > I can't work out how to get expression interpolation to happen within > command interpolation. For example: > > for (fn, arg) = ((:toucha, "a"), (:touchb, "b")) > #@eval ($fn)() = run(`touch $arg`) > @eval ($fn)() = run(`touch $(@eval ($arg))`) > end > > In the first of these cases, the result for toucha is > toucha() = run(`touch $arg`) > > and similarly for the second result, the parsing character $ is ignored by > the eval. Is there a way to get this to instead return > toucha() = run(`touch a`) > > ? >
