什么是在lua中忽略代码的最有效方式?
我有一段Lua代码,我希望能够(有选择地)忽略它。我没有选择不阅读它的选项,有时我希望它被处理,有时不想,所以我不能只是把它注释掉(也就是说,有很多代码块,我要么选择不读任何一个,要么读全部)。我想出两种方法来实现这个(可能还有更多——我是个新手):把代码包含在一个函数中,然后调用或不调用该函数(一旦我确定我不会调用该函数,我可以将其设置为nil以释放内存),或者将代码包含在if ... end块中。前者的优点在于有几个这样的块,使用前者的方法可使一个块更容易地加载另一个块,即使主程序没有请求,但后者似乎更有效率。然而,我不知道效率节约是否值得。
那么:
if false then
-- a few hundred lines
end
比
throwaway = function ()
-- a few hundred lines
end
throwaway = nil -- to ensure that both methods leave me in the same state after garbage collection
更有效率吗?
如果它取决于Lua实现很多,那么“几百行”需要有多大才能可靠地发现差异,以及应该包含哪些东西来进行最佳测试(代码块的主要用途是定义一堆可能有用的函数)?
Lua 不够智能以转储函数的代码,因此你不会节省任何内存。
就速度而言,你是在谈及每次程序执行时都发生的纳秒级别的差异。担心这一点几乎与实际性能无关,这会损害你的效率。 写出你认为最能清晰表达你意图的代码,不要试图变得“聪明”(http://c2.com/cgi/wiki?DoSimpleThings)。如果你遇到性能问题,它距离这个决定还有很长的路要走。
如果你想要节省内存,这在移动平台中可以理解,你可以将有条件的代码放到它自己的模块中,并且当不需要时不加载它(如果框架支持的话;例如 MOAI 支持,Corona 不支持)。
如果有很多未使用的代码,您可以将其定义为字符串集合,并在需要时使用loadstring()加载它。将函数存储为字符串将减少初始编译时间,但大多数函数的字符串表示可能比其编译形式占用更多的内存,并且在编译时节省的内容可能在几千行之前并不显着...只是说一下。
如果您将此代码放入表中,则可以通过元表透明地编译它以最小化对重复调用的性能影响。
示例代码
local code_uncompiled = {
f = [=[
local x, y = ...;
return x+y;
]=]
}
code = setmetatable({}, {
__index = function(self, k)
self [k] = assert (loadstring(code_uncompiled [k]));
return self [k];
end
});
local ff = code.f; --这里编译x的代码
ff = code.f; --这里没有编译
for i = 1, 1000 do
print(ff(2 * i,-i)); --这里没有编译
print(code.f(2 * i,-i)); --这里也没有编译,但表访问(较慢)
end
其乐妙处在于根据需要进行编译,您实际上不必再浪费思考它,它就像将函数存储在表中一样灵活。
此解决方案的另一个优点是,当动态加载的代码量过多时,您可以通过元表的__index函数透明地将其更改为按需从外部文件加载代码。此外,您可以通过使用“真实”函数填充“代码”表来混合编译和未编译的代码。
Lua 的多行注释可以通过以下方式来忽略:
function dostuff()
blabla
faaaaa
--[[
忽略这段注释
还有这段
或许这段
还有这一段呢
]]--
end
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
尝试先选择让代码更易读的选项。如果它在您的目标机器上运行得足够快,就使用它。
如果它运行不够快,尝试另一个选项。