*Luaライブラリ 要注意点 ~文字列ライブラリライブラリ~ [#y82939dd] **スタティックな記述とオブジェクト経由の記述 [#h83ecbef] >文字列ライブラリは、 #sh(lua){{ string.update() }} #sh(lua]){{ s = "abc" s:update() }} のような従来の記述も可能となっている。 **大文字、小文字無視のソート [#wea058a9] >~ #sh(lua){{ table.sort ( tbl, function (a, b) return string.lower(a) < string.lower(b) -- 両方小文字にしたものを比較 end ) }} **string.sub (s, i [, j]) [#e2739ca6] >文字 s[i], s[i+1], ..., s[j] の内部コードの数値を返す。~ 文字列 s の、位置 i から位置 j までの部分文字列を返す。~ i にも j にも、負の値を使える。~ j が省略されたときは -1 とみなされる~ (つまり文字列の長さと同じ)。特に、string.sub(s,1,j) は s の先頭から j 文字を取り出し、~ string.sub(s, -i) は s の最後の i 文字を取り出す。 **{s:byte(1,-1)}とstring.char(unpack(t)) [#f2c54682] >~ #sh(lua){{ {s:byte(1,-1)} }} で、sに含まれる文字列を全て文字コード化したリストを得ることが出来る。 そして、 #sh(lua){{ string.char(unpack(t)) }} で元の文字列を構築可能。 #sh(lua){{ s = "abc" t = {s:byte(1, -1)} t[1] = t[1] + 1 print(string.char(unpack(t))) --> "bbc" }} **string.format (formatstring, e1, e2, ...) [#dc2a0bb6] >(スクリプト言語で、Cファミリーのprintf系譜を持つのは、すでにかなりレガシーな臭いが漂うが…)~ ~ 最初の引数 (文字列でなければならない) で指定された記述に従い、残りの可変個の引数を書式化して返す。~ 書式文字列は標準C関数のprintfファミリーと同じルールに従う。~ ''ただし、 *、l、L、n、p、h はサポートされてなくて、追加の q がある点だけが異なる。''~ q オプションは、Luaインタプリタで安全に読み戻せる適切な形式の文字列に書式化する。~ ~ その文字列はダブルクォートの間に書かれ、文字列中のダブルクォート、改行、埋め込まれたゼロ、~ バックスラッシュは正しくエスケープされる。~ #sh(lua){{ string.format('%q', 'a string with "quotes" and \n new line') -- "a string with \"quotes\" and \ -- new line" }} ''c、d、E、e、f, g、G、i、o、u, X、x はすべて数値の引数を期待し、'' ''q と s は文字列を期待する。''