lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]




2010/12/12 Alexander Gladysh <agladysh@gmail.com>
Hi, list!

I have some code, written in a Lua-based DSL, a lot of constructs like this:

foo:bar "title"
{
 baz = "quo";

 alpha:beta "gamma"
 {
   "delta";
 };
}

This code is executed inside a custom global environment with
pre-defined global objects foo and alpha (one can say these objects
implement Builder pattern — things are a bit more complicated in my
case, but that doesn't matter for this question).

After the code is run, I inspect foo and alpha variables, and get the
built data from them.

Now I want to move this code to the Lua module — to make it reusable
via require().

Obviously, I can't just require() the file with DSL — the environment
would be wrong.

This means that I have to put my DSL into a function:

local dsl_chunk = function()
 return foo:bar "title"
 {
   baz = "quo";

   alpha:beta "gamma"
   {
     "delta";
   };
 }
end

return
{
 dsl_chunk = dsl_chunk;
}

This works, but is less pretty. Also it affects the code that loads
the DSL: I have to handle require-friendly DSL files differently.

Perhaps there is some trick that I miss? I don't mind to add some
boilreplate code to the "library" portions of my DSL code. But I'd
like to keep that boilerplate to a bare minimum.

Alexander.

can you just dofile() your DSL source/binary file?