我正在研究如何在lua字符串中嵌入lua函数(双括号)。只是为了阐述我的案例:
function my_message(msg)
return "Your message: " + msg
end
function makeString()
page = [[
<html>
<body>
<!--
I want to call my_message(..) lua function and embed the value here.
What is the best way to achieve this?
-->
</body>
</html>
]]
end
提前致谢。
答案 0 :(得分:1)
不支持在字符串文字中嵌入值。
或者,您可以拆分字符串并将其与my_message
的返回值连接起来,如下所示:
page = [[
<html>
<body>
<!--
]] ..
assert(load("return '" .. my_message("hello" .. "'")))()
.. [[
-->
</body>
</html>
]]
在Lua 5.1中,使用loadstring
代替load
。另请注意,Lua将..
中的字符串与+
中的my_message
联系起来,而不是{{1}}。
答案 1 :(得分:1)
使用gsub
并不太难,因为它接受函数作为替换字符串。您需要提供一个特殊标记,例如{my_message:something}
表示它将替换为my_message('something')
调用的结果:
function my_message(msg)
return "Your message: " .. msg
end
local map = {my_message = my_message}
function makeString()
local page = ([[
<html>
<body>{my_message:something else}</body>
</html>
]]):gsub("%{([%w_]+):(.-)%}", function(f, s)
return map[f] and map[f](s) or "can't find "..f.. " function to call"
end)
return page
end
print(makeString())
这会将{my_message:something else}
替换为Your message: something else
,这可能对您有用。
答案 2 :(得分:0)