加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

应该在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元方法,它返回使用的密钥.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读