2016-03-28 81 views
1

有没有办法在Lua中使用heredoc类型的表示法来引用字符串中的变量?带变量插值的Lua heredoc?

我想要做的基本想法看起来如下所示。 heredoc棋子很好,但在Lua中,你实际上不能以我在下面显示的方式引用变量。

username = "bigtunacan"  

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

什么是“heredoc?” –

+0

@NicolBolas它是一个源代码文件的一部分,它被视为是一个单独的文件,它已被加载到位。 https://en.wikipedia.org/wiki/Here_document 它们通常用于多行字符串文字,因为它们通常比使用常规字符串连接对长多行字符串更清晰。 在我的示例中,我有一个简短的字符串,但这是为了简化我的问题。 – bigtunacan

+0

好的,所以我应该假装你说“多行字符串”呢? –

回答

2

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

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

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

注一组额外的() - 这是所以只有第一回 - 插值的字符串是从gsub使用和2日 - 数替代制成 - 丢弃。如果在某些函数的参数列表中使用gsub的结果作为最后的结果,那么添加一个多个参数可能会产生不同的行为,这可能很重要。

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

+1

这可能有所帮助:http://stackoverflow.com/a/32678279/149076 –

0

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

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