我有以下类型的代码,我在同一个文件中使用了6-7次:
str=(line):match("constraints(.*)end")
for split in string_gsplit(str, '\n', true) do
if
string.match(split,'%a+')
then
a=(split):match("(.-)%s")
a=null_value(a)
b=(split):match("tx=(%a+)")
b=null_value(b)
c=(split):match("ty=(%a+)")
c=null_value(c)
d=(split):match("tz=(%a+)")
d=null_value(d)
e=(split):match("rx=(%a+)")
e=null_value(e)
f=(split):match("ry=(%a+)")
f=null_value(f)
g=(split):match("rz=(%a+)")
g=null_value(g)
print(a..b..c..d..e..f..g)
end
end为了避免重复,我想在这里使用函数。这样,我只调用函数,就可以得到打印结果。因为每个匹配函数的参数都是不同的。用双引号("abc")给出的字符串是不同的,不能相同。请帮我创建一个函数。
我试着创建它。看一看:
function f(s)
assert(type(s) == "string")
str=(line):match(s)
for split in string_gsplit(str, '\n', true) do
if
string.match(split,'%a+')
then
end
end
return s
end为了调用相同的函数,我输入:
s="constraints(.*)end"
f(s) 发布于 2012-06-07 01:25:38
不太清楚你想要的是什么。您想要删除哪些重复项?split:match-null_value行的列表?您可以通过将模式放在一个列表中来在循环中执行此操作:
local patterns = { "(.-)%s", "tx=(%a+)", "ty=(%a+)", "tz=(%a+)", "rx=(%a+)", "ry=(%a+)", "rz=(%a+)" }
local results = {}
for i,pattern in ipairs(patterns) do
results[#results+1] = null_value( split:match(pattern) )
end
print(table.concat(results))提示:
,,
split:match(patt)的含义与(split):match(patt).发布于 2012-06-06 19:36:13
您可以在字符串表上创建类似于match和find的函数,如下所示:
function string.ReadArgument( str, pattern )
return null_value( str:match( pattern ) )
end您可以在代码中使用它,如下所示
a = split:ReadArgument( "(.-)%s" )
b = split:ReadArgument( "tx=(%a+)" )诸若此类。
https://stackoverflow.com/questions/10912366
复制相似问题