我有以下函数只返回其字符串参数: function N_(s) return send 您可以从gettext识别此功能名称.它仅为.pot提取器的好处标记. 在C或Lua中实现N_()会更有效吗? 你能给我一个经验法则吗? 另一个
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元方法,它返回使用的密钥.