Lua 文字列の謎
Lua の文字列なんですが。
s = 'hoge' print(#s) --> 4 print(#'hoge') --> 4
リテラルであれ変数に代入したものであれ長さ演算子 #
で長さを取得できると、ここまではいいとして……
文字列ライブラリはすべて、テーブル string 内の関数として提供される。また、__index フィールドが自身を指す文字列用メタテーブルをセットする。従って、文字列関数はオブジェクト指向スタイルで使うことができる。例えば、string.bytes(s, i) は s:byte(i) と書くこともできる。5.4 - 文字列操作
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html#5.4
文字列のメソッドとして文字列操作関数が設定されているのですが、これが変数に入れたもの
s = 'hoge' print(s:len()) --> 4
に対してでなくリテラルに対して直接だと
print('hoge':len()) --> エラー: ')' expected near ':'
とエラーになる罠。
print(('hoge'):len()) --> 4
こんなぐあいに ( )
で括ると正常動作するのですが。謎な仕様だ。
Lua、奥深いな。