当前位置 : 主页 > 网络编程 > lua >

应该在Lua或C中实现“无操作”功能吗?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有以下函数只返回其字符串参数: 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元方法,它返回使用的密钥.

网友评论