2016-03-28 67 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

你當然可以編寫一個函數來解析它並進行替換。