開発環境: MacOS
Lua 5.4.4
外部リンク: 菜鳥教程 - Lua
紹介#
Lua は、月から名前を取った非常にシンプルで高速で強力なスクリプト言語です。
基本構文#
Lua は非常にシンプルで、数時間で簡単にマスターできます。
Hello World!#
print("Hello World")
コメント#
-- シングルラインコメント
--[[
マルチラインコメント
--]]
変数#
デフォルトでは、変数は常にグローバルと見なされます。
グローバル変数は宣言する必要はありません。変数に値を代入すると、そのグローバル変数が作成されます。初期化されていないグローバル変数にアクセスしてもエラーは発生しませんが、結果は nil になります。
—— 菜鳥教程 / Lua 基本構文
local
キーワードを使用してローカル変数を設定します。
-- グローバル変数
variable = 123
-- ローカル変数を設定
local local_variable = "string"
-- 長い変数
many_line_text = [[
/ _
(__(/(/
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio
]]
基本型#
NULL
をnil
に変更した以外は、特に違いはありません(詳細)。
-- 空
nil_variable = nil
print(nil_variable)
変数の操作#
2 つの変数を連結する#
-- 変数を連結
local link_str_a = "astr"
local link_str_b = "bstr"
local str_c = link_str_a..link_str_b
print(str_c)
型変換#
-- 型変換
local int_a = tostring(10)
print(type(int_a))
int_a = tonumber(int_a)
print(type(int_a))
変数のさまざまな出力方法#
-- グローバル変数
variable = 123
-- ローカル変数を設定
local local_variable = "string"
print("var = ", variable, "local var = ", local_variable)
print(string.format("var = %d, local var = %s", variable, local_variable))
配列とインデックス#
注意⚠️:
Lua の配列は 1 から始まります。0 ではありません!!!
-- 配列
array = {233, "qwq", 996, "乐"}
print(array[1])
-- 挿入
-- 末尾に挿入
table.insert(array, "新しい要素を挿入")
-- 中間に挿入
table.insert(array, 2, "2番目の要素が変更されました")
-- 挿入は変更ではなく、以前の2番目の要素が3番目になりました
print(array[5]) -- 新しい要素を挿入
print(array[2]) -- 2番目の要素が変更されました
print(array[3]) -- qwq
-- 削除
-- 2番目の要素を削除
table.remove(array, 2)
print(array[2]) -- 2番目の要素が変更され、3番目の要素が2番目になりました
-- 削除された要素を代入
local remove_number = table.remove(array, 1)
-- この時点で、remove_number = 233(array[1]), array[1] = "qwq"
print(array[1])
print(remove_number)
-- インデックス
str_array = {
str_a = "a",
int_a = 123456,
-- 奇妙なインデックス
[";;,fun"] = "233"
}
print(str_array["str_a"])
-- or
print(str_array.int_a)
-- and
print(str_array[";;,fun"])
-- 代入
str_array["abuc"] = "223"
print(array.abuc)
関数と条件分岐#
-- 関数とif
function calculate(symbol, a, b)
-- Luaでは、`~=`を使用して等しくないことを表します
--[[
`or` == `||`
`and` == `&&`
`not` == true -> false or false -> true
--]]
if ((type(symbol) ~= "string" or (type(a) or type(b)) ~= "number")) then
print("エラー:未知の入力タイプ")
return nil
end
if (symbol == "+") then
return a+b
elseif (symbol == "-") then
return a-b
elseif (symbol == "*") then
return a*b
elseif (symbol == "/") then
return a/b
else
print("エラー:未知のシンボルタイプ")
return nil
end
end
print(calculate("+", 1, 2))
各種ループ#
-- ループ
while_var = 0
-- ループの前に判定
while (while_var < 3) do
while_var = while_var + 1
end
print("while_var ->", while_var)
-- ループの後に判定
repeat
while_var = while_var + 1
until (while_var > 5)
print("while_var ->", while_var)
-- i=3 から始まり、ループごとに i = i-1 となり、i==1 になるまで続ける
for i=3, 1, -1 do
print(i)
end
-- ジェネリックforループ
for i, v in ipairs(array) do
print(i, v)
end
-- Luaはネストされたループをサポートしています
more_array = {}
for i=1, 3 do
more_array[i] = {}
for j=1, 3 do
more_array[i][j] = i*j
end
end
-- 配列へのアクセス
for i=1,3 do
for j=1,3 do
print(string.format("%d ", more_array[i][j]))
end
end
複数ファイルプログラミング (パッケージ)#
Lua では、require(パッケージ名)
を使用して簡単にパッケージを呼び出すことができます。ただし、require
はデフォルトでプロジェクトのルートディレクトリからパッケージファイルを検索するため、コードファイルの作業ディレクトリではありません。パッケージを別の場所に配置した場合、次のように呼び出す必要があります。
-- プロジェクトのsrcディレクトリでmodパッケージを検索します
require(src.mod)
インスタンス#
同じディレクトリにmod.lua
を作成します。
-- mod.lua
-- これはパッケージです
mod = {}
mod.constant = "これは定数です"
mod.constant_two = "これは別の定数です"
-- これはパブリック関数です
function mod.add(a, b)
return a+b
end
-- これはプライベート関数です
local function subtraction(a, b)
return a-b
end
-- 呼び出し
function mod.open_sub(a, b)
subtraction(a, b)
end
return mod
main.lua
で呼び出します。
-- パッケージを呼び出す
require("mod")
-- 使用
print(mod.add(1, 2))
その他#
配列、変数の長さを取得する#
-- 長さを取得
local local_variable = 123
array = {1, 2, 3, 4, 5}
-- `#`を追加
print(#array)
print(#local_variable)