u16suzuの blog

日々学んだことのメモブログです。

lua文法自分用メモ

コメント
-- 1 line
--[[
multi line
]]--
print

print(33)
= 'hoge'
= は対話環境で飲み使える。 =の場合はカッコ要らない。

変数の型を得る

type("hi")

型の種類

nil
ブーリアン
数値(number)
文字列(string)
関数
ユーザーデータ: cのソースを格納
スレッド: Luaはコルーチンをサポートしている
テーブル: 連想配列, indexとfieldがペア

終端の;セミコロンはあってもなくてもいい

String

to_str, to_number

tostring(12.3)
tonumber("1")

concat

> a="a".."b"; print(a);

length

#"abc"

substring

string.sub("hoge", 0, 2)

include?

string.find("hoge", "h") -- => 1
"hoge":find("o") -- => 2

メソッドの呼び方は2通りある

テーブル

Luaには配列、ハッシュ共になくテーブルしかない。
arrayもhashもテーブルの1用法として実現する。

a={1, 2, 3}
h={a=1, b=2, c=3}

-- 各アクセスは以下のとおり ハッシュの h.a でアクセスできるシンタックスシュガーがいいかんじ
print( a[1] )
print( h["a"], 'or', h.a )

Array

literal

a={1, 2, 3}

追加(index で位置指定)

table.remove( a, index)

取り出し

table.insert( a, index, 3.3 )

size

table.getn( a )

function definition関数定義

function sum(a1, a2)
return a1+a2
end

function value?

hoge = function(a1, a2)
return a1+a2
end
print( hoge(3, 3))



比較演算子

hoge ~= fuga : 否定
あとは大体同じ
false, nil 以外は全て真になる。0, "" なども真。

制御文

if
if true then
  print(33)
elseif 33==33 then
  print(35)
else
  print(34)
end

条件部分に()はあってもなくてもいいけど、thenは必須

if( true ) then
  print( 'hoge' )
end
for
for i=1, 10 do
  print( i )
end

for i=1 , 10, 2 do
  print( i  )
end

これは()つけるとエラー。メソッド扱いになるっぽい

for( i=1, 3) do
end

  -> lua: hoge.lua:8: '<name>' expected near '('
for each_with_index
a = {2, 3, 4}
for i, value in ipairs(a) do
  print( i, value )
end
each
data = {a=5, b=6, c=7}
for key, value in pairs(data) do
  print( key, value )
end
論理演算子

and
or

or使って、初期化されてなければ初期化

a= a or 33



外部ファイル読み込み

dofile('hoge.lua')

eval

f = loadstring( "print(33)" )
f() -- call

File IO

デバッグインターフェース

エラーコレクション

print arg

  • > '=' expected near 'arg'

> =("aa"+"bb")
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
stdin:1: in main chunk
[C]: ?



a=10
while a>0 then
print( a )
a = a-1
end

  • > lua: hoge.lua:26: 'do' expected near 'then'