带变量插值的 Lua Heredoc?

big*_*can 6 lua

有没有办法在Lua中使用heredoc类型的符号来引用字符串中的变量?

我想要做的基本想法如下所示。Heredoc 部分很好,但在 Lua 中,您实际上无法按照我下面显示的方式引用该变量。

username = "bigtunacan"    

sql=[=[
  SELECT * FROM users WHERE username='$bigtunacan';
]=]
Run Code Online (Sandbox Code Playgroud)

Ole*_*kov 7

没有内置的字符串插值,但可以使用gsub替换表轻松实现。

sql=[=[
  SELECT * FROM users WHERE username='$username';
]=]

print((sql:gsub('$(%w+)', { username = 'bigtucan' })))
-- SELECT * FROM users WHERE username='bigtucan';
Run Code Online (Sandbox Code Playgroud)

请注意一组额外的()- 这只是第一次返回 - 使用插值字符串gsub和第二个 - 进行的替换次数 - 默默地丢弃。gsub如果您在某个函数的参数列表中使用最后一个结果,其中添加一个参数可能会产生不同的行为,那么这一点可能很重要。

另外,如果你想在 SQL 上下文中使用它,你真的应该使用占位符。