有沒有辦法在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
好的,所以我應該假裝你說「多行字符串」呢? –