【问题标题】:Lua heredoc with variable interpolation?带有变量插值的Lua heredoc?
【发布时间】:2016-03-28 02:50:53
【问题描述】:

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

我正在尝试做的基本想法如下所示。 heredoc 部分很好,但在 Lua 中,您实际上不能以我在下面显示的方式引用变量。

username = "bigtunacan"    

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

【问题讨论】:

  • @NicolBolas 它是源代码文件的一部分,被视为已加载的单独文件。 en.wikipedia.org/wiki/Here_document 它们通常用于多行字符串文字,因为它们通常比对长多行字符串使用常规字符串连接更清晰。在我的示例中,我有一个短字符串,但这是为了简化我的问题。
  • 好的,那么我应该假装你说的是“多行字符串文字”?
  • 是的;这是查看它的最简单方法。

标签: lua


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    没有允许在任何字符串中进行变量插值的 Lua 构造。请参阅官方参考指南中的Literal Strings

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-19
      • 2021-05-26
      • 2012-01-05
      • 1970-01-01
      • 2020-11-02
      • 2013-10-07
      • 1970-01-01
      相关资源
      最近更新 更多