2016-03-28 3 views
1

文字列内の変数を参照するLuaのheredoc型の表記法を使用する方法はありますか?可変補間のLuaヘレドック?

私がしようとしていることの基本的な考え方は、次のようになります。 heredocの部分は問題ありませんが、Luaでは実際には以下のように変数を参照することはできません。

username = "bigtunacan"  

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

「ヘレドック」とは –

+0

@ NicolBolasソースコードファイルのセクションで、あたかもロードされた別のファイルであるかのように扱われます。 https://en.wikipedia.org/wiki/Here_document 長い複数行文字列に対して通常の文字列連結を使用するよりも、通常はより明確なので、複数行の文字列リテラルによく使用されます。 私のサンプルには短い文字列がありますが、それは私の質問のために簡素化することでした。 – bigtunacan

+0

OKだから、 "multiline string literal"と言ったほうがいいでしょうか? –

答えて

2

組み込みの文字列補間はありませんが、gsubと置換テーブルを使用して簡単に実装できます。

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

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

()の余分なセット - これはそう最初のリターンです - 補間文字列がgsubから使用され、第2 - 置換数が行わ - 黙って破棄します。 1つ以上の引数を追加することによって異なる動作が生じる可能性のある関数の引数リストの最後にgsubの結果を使用する場合、これは重要です。

また、これをSQLコンテキストで使用する場合は、代わりにプレースホルダを使用する必要があります。

+1

これは役立ちます:http://stackoverflow.com/a/32678279/149076 –

0

任意の文字列内で変数の補間が可能なLua構文はありません。公式リファレンスガイドのLiteral Stringsを参照してください。

もちろん、解析して置換を行う関数を書くことができます。