How to override Lua library functions
Why would you want to override Lua library functions? First, it helps to learn more about calling C++ functions from Lua in a progressive way, before moving on to C++ modules. Second, but more importantly, it is a frequent requirement for real-life projects.
Suppose you are working on a game where assets are packed inside a private archive and your Lua scripts need to access them. Overriding the Lua io
and file
libraries can provide a seamless experience for your fellow Lua developers and enforce security at the same time. You can make sure Lua scripts can only access assets you want them to, but nothing else on the host filesystem. This is even more important when your users can change the Lua scripts.
Let us implement a more trivial case. We use the Lua print
function to output debug information. We want to merge the Lua debug output with C++ output so that we get all our logs in the same place ordered by the time they are printed.