lua-users home
lua-l archive

dirty trick inspired by modules

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


I have a rather big collection of higher-order functions that are used
to improve and evaluate an assignment of papers to reviewers. I was
struggling to find a good way to do this when it suddenly hit
me that I could adapt the module technology. My code looks like this:
 local function amodule(asst, papernums)
 asst.pinned = asst.pinned or table.of_tables { }
 asst.papers = asst.papers or table.of_tables { }
 asst.reviewed_by = asst.reviewed_by or table.of_tables { }
 local pinned, papers, reviewed_by = asst.pinned, asst.papers, asst.reviewed_by
 local M = { }
 setmetatable(M, { __index = _G })
 setfenv(1, M)
 
 ... large collection of definitions as for global variables ...
 return M
 end
The use of the code then becomes very simple:
 local function go(asst, papernums, do_pc)
 local A = amodule(asst, papernums)
 A.extend(stdrtabs.coarseh, papernums)
 A.balance(stdrtabs.finesth, stdrtabs.finesth)
 A.increase_happiness(assert(stdrtabs.finesth))
 A.increase_happiness(assert(stdrtabs.avoid_ds))
 A.elim_no_champion()
 A.elim_inexpert_champion()
 if do_pc then A.pc_does_not_review_pc() end
 return asst, A.xc_counts
 end
I thought others might enjoy using this trick as well.
Norman

AltStyle によって変換されたページ (->オリジナル) /