LoginSignup
28
22

More than 5 years have passed since last update.

備忘録Lua

Last updated at Posted at 2014-07-25

etc

  • はじめて代入を行う前の変数の値は nil

  • 関数の仮引数はローカル関数の一種

  • Luaの文法では、文字列1つだけを与えて関数を呼び出す時は、()を省略できる

    • require "common.lua" のように書ける
    • print testprint .. "OK" のようなものは駄目。
      • 文字列を連結したりする時は、print( testprint .. "OK" ) のように、()でくくる必要がある

ゼロ埋め

「ゼロパディング」「ゼロサプライ」などと呼ばれているもので、
数値の表記桁数を揃えるのに 0 を書き加える。

string.format( "%04d", num )

↑で num = 53 の時 0053 と出力する。

入門Luaから覚え書き

文字列は '' "" [[]] で囲む

  • '' "" でのエスケープ文字は \
  • [[]] は、文字列中に ' や " が入っている時などに用いると便利
    • [[]] では、エスケープ文字が無効
    • [[]] 内で途中改行をすると、途中改行も含む

; は行末を表す

1行に複数のコマンドが書ける

インクリメントは x = x + 1

  • Ruby のように x += 1 とは書けない
  • C のように x++ とは書けない

for ループ変数 = 初期値,最終値,増分値 do

  • 増分値は負も可能
  • ループ変数は、forループ内のみで使えるローカル変数

テーブルには関数を入れられる

table.maxn は、maxnがテーブルtableの1要素になる、ということ。

Luaではfalseとnil以外はすべて真

-1も0も真。

or を使ったデフォルト値の代入

a = a or 10

a が nil か false の時、10が代入される

local を宣言していない変数は、すべてグローバル変数になる

計算や結合で強制変換されるのは数値と文字列だけ

テーブルなどは tonumber()tostring() で変換する

#は長さオペレータ

  • #配列名 で、配列の要素数を返す
    • table.maxn(配列名) と書かなくても良い
  • #文字列変数名 で、文字列の長さを返す
    • string.len(文字列変数名) と書くのと同じ

テーブルは番号とフィールド名を混在できる

{ 123, 45, score={5,6}, date="2014-01-03" }
{ [1]=123, [2]=45, score={5,6}, date="2014-01-03" } と同じ。

テーブルそのものを比較する

テーブルの中身が同一だとしても「別のテーブル」と認識されて、
別ものと判定される。

名前なし関数が作れる

テーブルの1フィールドで作ったりできる。
しかし、名前なし関数は、まず使わないとは思う。

引数が可変個の関数が作れる

function f(...) のように、 ... は可変個を表す。
関数内で local arg = { ... } とすることで、引数を全部受け取れる。

複数の値を返すのに、スタックが用いられている

  • i,j=test() で、test内でreturn 1,2 とすると、i=1,j=2になる
  • x,y=1,2 だと、x=1,y=2になる
  • a,b=b,a で、変数間の値入れ替えができる

新しいデータ型を作る

  • XY(1,2) のように作れる
  • テーブルかCのuserdata型で作ることができる
  • 入門Luaでは、メタテーブルを作るのに、メタメソッドとコンストラクタを用意している

代入文の結果は値として使えない

Luaの = による代入は、1つの実行単位でしかない。

プログラミング言語Lua公式解説書から覚え書き

table.maxn(a) と #a は異なる

  • maxn は最大インデックスを返す
  • #a は入っている個数を返す

文字列の比較演算は、アルファベット順に比較

"acai" < "acorde" のような比較ができる。

複数の変数に値を代入する際は a,b,c=0,0,0 とする

a,b,c=0 は a=0;b=nil;c=nil になる。

pairs() forループでフィールドをすべて検査

for i in pairs(test) do print(i) end

ipairs() forループでテーブルを順に検査

for i,v in ipairs(test) do print(v) end
28
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
22