• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

lua

date: 2022-01-17 excerpt: luaの基本

tag: luaneovim


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"

参考

  • Learn X in Y minutes
  • Lua_Quick_Guide.ipynb


luaneovim Share Tweet