使用内嵌函数的 Lua 字符串 [[ .. ]]

我正在寻找在Lua字符串(双括号)中嵌入Lua函数的方法。 仅举一个例子:

example.lua:

function my_message(msg)
    return "Your message: " + msg
end

function makeString()
    page = [[
        <html>
            <body>
<!--
        我想调用 my_message(..)Lua函数并在此处嵌入该值。  
        什么是实现这一点的最佳方式?
-->
            </body>
        </html>
    ]]
end

提前感谢。

点赞
用户1009479
用户1009479

在字符串字面值中嵌入值不受支持。

或者,您可以拆分字符串,然后按如下方式将它们与my_message的返回值连接起来:

page = [[
    <html>
        <body>
<!--
]] ..
assert(load("return '" .. my_message("hello" .. "'")))()
.. [[
-->
        </body>
    </html>
]]

在Lua5.1中,使用loadstring替换load。还请注意,Lua使用..而不是您的my_message中的+连接字符串。

2014-10-03 05:11:43
用户1442917
用户1442917

使用 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,这可能适合你的要求。

2014-10-03 05:51:39
用户312586
用户312586

我会使用现有的模板库。

例如:

2014-10-03 08:21:41