【问题标题】:String Concatenation in Lua using a string value in a variableLua中的字符串连接使用变量中的字符串值
【发布时间】:2014-02-07 19:07:06
【问题描述】:

我有函数名为

MapMSH(Msg.MSH, b)
MapPID(Msg.PID, b)
MapPV1(Msg.PV1,b)

现在,在我将调用上述三个函数的另一个函数中,我有一个变量 u 循环遍历值 MSHPIDPV1 我知道我需要使用.. 运算符来连接字符串。

我真正想要的是将u 中的值连接到 Map,类似于

"Map"..u(Msg.u, b)   

这样只要u 中的值匹配,我的函数就会被自动调用。 使用上面的语法,它会在"Map" 附近显示意外符号 有人可以告诉我确切的语法吗?

【问题讨论】:

  • 如果您发现自己需要此功能,请使用按字符串索引的表,并使用相应函数的值。

标签: string lua string-concatenation


【解决方案1】:

如果你的函数在全局命名空间中,试试这个。

funcList = {"MSH","PID","PV1"}

for _,u in pairs(funcList) do
    _G["Map"..u](Msg[u],"X")
end

测试

Msg = { MSH="MSH", PID="PID", PV1="PV1" }
function MapMSH(a, b)
    print( a..b )
end
function MapPID(a, b)
    print( a..b )
end
function MapPV1(a, b)
    print( a..b )
end

输出

MSHX
PIDX
PV1X

您的问题与this problem非常相似。

【讨论】:

  • 添加注释:函数必须是全局的才能工作。
  • for u in string.gmatch(S, "([^,%s]+)") 做 l[k] = u k=k+1 _G["Map"..u]( Msg[u],R[1]) end 但是有了这个,它似乎只选择第一个是 MSH,如果列表有 MSH 和 PID 并且所有三个都被调用,我希望同时调用两个相应的函数如果列表有 MSH、PID 和 PV1
  • 问题是,如果在 u 中传递了 3 个值而不是每次循环迭代都没有一个函数,我希望一次性调用所有三个函数。其次,我还希望检查函数的存在,因为如果你有 nil,那么它将变成 Map.nil 并且具有该名称的函数显然不存在。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2016-03-24
  • 2018-06-23
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多