有没有办法在Lua中使用heredoc类型的表示法来引用字符串中的变量?带变量插值的Lua heredoc?
我想要做的基本想法看起来如下所示。 heredoc棋子很好,但在Lua中,你实际上不能以我在下面显示的方式引用变量。
username = "bigtunacan"
sql=[=[
SELECT * FROM users WHERE username='$bigtunacan';
]=]
有没有办法在Lua中使用heredoc类型的表示法来引用字符串中的变量?带变量插值的Lua heredoc?
我想要做的基本想法看起来如下所示。 heredoc棋子很好,但在Lua中,你实际上不能以我在下面显示的方式引用变量。
username = "bigtunacan"
sql=[=[
SELECT * FROM users WHERE username='$bigtunacan';
]=]
没有内置的字符串插值,但可以用gsub
和替换表来实现。
sql=[=[
SELECT * FROM users WHERE username='$username';
]=]
print((sql:gsub('$(%w+)', { username = 'bigtucan' })))
-- SELECT * FROM users WHERE username='bigtucan';
注一组额外的()
- 这是所以只有第一回 - 插值的字符串是从gsub
使用和2日 - 数替代制成 - 丢弃。如果在某些函数的参数列表中使用gsub
的结果作为最后的结果,那么添加一个多个参数可能会产生不同的行为,这可能很重要。
另外,如果你想在SQL上下文中使用它,你应该使用占位符。
这可能有所帮助:http://stackoverflow.com/a/32678279/149076 –
没有Lua构造允许在任何字符串中进行可变插值。请参阅官方参考指南中的Literal Strings。
你当然可以编写一个函数来解析它并进行替换。
什么是“heredoc?” –
@NicolBolas它是一个源代码文件的一部分,它被视为是一个单独的文件,它已被加载到位。 https://en.wikipedia.org/wiki/Here_document 它们通常用于多行字符串文字,因为它们通常比使用常规字符串连接对长多行字符串更清晰。 在我的示例中,我有一个简短的字符串,但这是为了简化我的问题。 – bigtunacan
好的,所以我应该假装你说“多行字符串”呢? –