luaの基本
概要
- neovimバインディングでluaが有力である
- スクリプト言語としては高速
pythonとの速度の比較
- datetimeを整形して表示するプログラムにて、
pypy3
,python3
,luajit
,raw
で比較した - luajitはrawと匹敵するほどの速度となった
- シェルとのバインディングや遅延が無視できないときなどは最適な選択である
pypy3 0.03402173185348511
python3 0.022615577220916748
python3S 0.007646487712860107
luajit 0.0009141483306884765
raw 0.0007457847595214843
環境のインストール
ubuntu
$ sudo apt install luajit
スクリプトの実行
$ luajit <filename>.lua
基本文法
基本の型
-- コメントアウト
num = 42
print(num)
-- 文字はシングルクオートでも、ダブルクオートでもOK
s = 'walternate'
t = "double-quotes are also fine"
-- ヒアドキュメント
u = [[ Double brackets
start and end
multi-line strings.]]
-- null、GCが作動する
t = nil
-- リスト
v = {'value1', 'value2', 1.21, 'gigawatts'}
for i = 1, #v do -- #vはリストのサイズ
print(v[i]) -- Indicesは1から始まる(やばい)
end
ループ
while num < 50 do
num = num + 1 -- No ++ or += type operators.
end
for
fredSum = 0
for j = 100, 1, -1 do
fredSum = fredSum + j
end
if文
if num > 40 then
print('over 40')
elseif s ~= 'walternate' then -- ~= is not equals.
io.write('not over 40\n') -- Defaults to stdout.
else
-- Variables are global by default.
thisIsGlobal = 5 -- Camel case is common.
local line = io.read() -- Reads next stdin line.
print('Winter is coming, ' .. line)
end
三項演算
aBoolValue = false
ans = aBoolValue and 'yes' or 'no' --> 'no'
関数
function fib(n)
if n < 2 then
return 1
end
return fib(n - 2) + fib(n - 1)
end
リスト操作
t = {}
table.insert(t, "Hello") -- 追加
table.insert(t, "World") -- 追加
for i,v in ipairs(t) do
print(i, v); -- 1 "Hello", 2 "World"
end
y = table.concat(t, ", ") -- "Hello, World"