この記事は
バーチャルキャストでのVCIのluaスクリプトで使う文字列の扱いについてまとめます。といっても今回の内容は、ふつうのluaスクリプトでも同じ振る舞いをしてくれると思います。
文字列の連結
文字列を表示する際に、変数を文字列に埋め込んだり、複数個の文字列を連結したりしたくなることがあると思います。luaでの文字列の連結操作には二通りの方法があります。
・ 2連ピリオドによる単純連結
・ stringクラスによるsprintf風連結
今回はこのうち 2連ピリオド による方法を紹介したいと思います。
2連ピリオドによる単純連結
文字列と文字列(もしくは変数)とをピリオド二つでつなぐ方法で、よく見る連結法です。単純で簡単なのでちょっとしたデバッグの際など、ちゃんと書かなくてもいいので さっと書きたい時 に重宝します。
local str = "おはよう".."ございます"
print(str)
おはようございます
おそらくよく見るコードとしては、文字列に何らかの変数を埋め込んで表示するタイプでしょう。
local num = math.random(1,10)
local str = "あなたが引いた乱数は"..num.."です。"
print(str)
あなたが引いた乱数は7です。
この記法は改行を入れたときも有効なので、コードの上で文字列が長くなってしまって可読性が低くなってしまった際にも使うことができます。(物語や説明文などの長文などで起きがち)
local str = "拙者親方と申すは、御立会の内に御存知の御方も御座りましょうが、御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、只今では剃髪致して圓斎と名乗りまする"
print(str)
拙者親方と申すは、御立会の内に御存知の御方も御座りましょうが、御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、只今では剃髪致して圓斎と名乗りまする
定義の際に以下のように直しておくと、結果は変わらず、かつエディタ上で見やすさを確保することができます。
local str = "拙者親方と申すは、"..
"御立会の内に御存知の御方も御座りましょうが、"..
"御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、"..
"青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、"..
"只今では剃髪致して圓斎と名乗りまする"
print(str)
拙者親方と申すは、御立会の内に御存知の御方も御座りましょうが、御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、只今では剃髪致して圓斎と名乗りまする
レベル0開き括弧
今回の話題とは違った方法ですが、コード上での見た目を整えるだけなら、大かっこを使っても書けます。こちらはbrタグがなくても見た目通り改行が反映されます。
local str = [[拙者親方と申すは、
御立会の内に御存知の御方も御座りましょうが、
御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、
青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、
只今では剃髪致して圓斎と名乗りまする]]
print(str)
拙者親方と申すは、
御立会の内に御存知の御方も御座りましょうが、
御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、
青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、
只今では剃髪致して圓斎と名乗りまする
こちらは引用符で囲ったのと同じ扱いを受けるので注意です。
ただし、最初の括弧の直後の改行だけは無視されます。
つまり、以下でも同じ結果となります
local str = [[
拙者親方と申すは、
御立会の内に御存知の御方も御座りましょうが、
御江戸を発って二十里上方、相州小田原一色町を御過ぎなされて、
青物町を上りへ御出でなさるれば、 欄干橋虎屋藤右衛門、
只今では剃髪致して圓斎と名乗りまする]]
print(str)
軽くまとめ
二連ピリオドによる方法は、"単純連結"と表現した通り、本当に連結しかできません。
もう一つのstringクラスによる方法では、数値の表示方法を細かく指定することができるほか、変数の数などを柔軟に対応させることが可能です。記事が長くなってしまったので、stringクラスによる方法は別記事でまとめたいと思います。