Lua heredoc 中如何使用变量插值?

有没有办法在 Lua 中使用类似 heredoc 的表示法,并在字符串中引用变量?

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

username = "bigtunacan"

sql=[=[
  SELECT * FROM users WHERE username='$bigtunacan';
]=]
点赞
用户1580216
用户1580216

在 Lua 中没有任何构造允许在任何字符串中进行变量插值。在官方参考指南的字面字符串中了解更多信息。

当然,你可以编写一个函数来解析它并进行替换。

2016-03-28 03:08:23
用户936986
用户936986

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

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

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

注意多余的一对 () - 这是为了只使用 gsub 返回的第一个插值字符串,第二个表示所做的替换次数将被忽略。如果您将 gsub 的结果用作某些函数的参数列表中的最后一个,请注意这一点可能很重要,添加一个更多的参数可能会产生不同的行为。

此外,如果您希望在 SQL 环境中使用此操作,真正应该使用占位符来实现。

2016-03-28 05:17:31