应该在Lua或C中实现“无操作”功能吗?
发布时间:2020-12-14 21:42:28 所属栏目:大数据 来源:网络整理
导读:我有以下函数只返回其字符串参数: function N_(s) return send 您可以从gettext识别此功能名称.它仅为.pot提取器的好处标记. 在C或Lua中实现N_()会更有效吗? 你能给我一个经验法则吗? 另一个问题: 假设我的函数有点复杂: function Z_(s) return dict[s]
我有以下函数只返回其字符串参数:
function N_(s) return s end 您可以从gettext识别此功能名称.它仅为.pot提取器的好处标记. 在C或Lua中实现N_()会更有效吗? 你能给我一个经验法则吗? 另一个问题: 假设我的函数有点复杂: function Z_(s) return dict[s] or s end 在C或Lua中实现Z_()会更有效吗? (我将从Lua代码中调用N_()和Z_(),而不是从C代码调用.) 解决方法
如果你在Lua度过大部分时间,那么在Lua中实现的功能不是非常处理器密集的功能很可能比C中的功能更有效.如果您将来某个时间最终使用
LuaJIT,则尤其如此.编译器总是能够从函数中推断出更多信息(如果它是语言中的信息),而不是它不知道任何关于它的一些模糊的C函数,并且它不必在不同的上下文中进行相同的跳跃.
在C中实现Z_的问题是你还必须在C中实现dict,其中Lua已经具有这样的功能.所以,这取决于你是否需要一些特别优化的哈希映射,也许C会更好. 如果您关心的是函数调用效率,为什么不只是缓存结果呢? -- instead of doing: print(Z_('Hello world! My name is %1!','Lua')) -- perhaps do this: local greeting = Z_('Hello world! My name is %1!','Lua') print(greeting) -- reuse greeting at some later time. 当然,你的Z_函数看起来不像是需要替换,但我想它可能会在以后.但是,如果你从不需要替换,你也可以把它变成这样的表: local Z = setmetatable({},{__index = function(t,k) return k end}) Z['greetings'] = 'Hello world!' print(Z['greetings']) -- Hello world! print(Z['goodbye']) -- goodbye 如果表没有这样的条目,该表有一个__index元方法,它返回使用的密钥. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |