Lua は動的に型指定される言語です。変数に型を指定する必要はなく、変数に値を割り当てるだけで済みます。
値は変数に保存したり、引数として渡したり、結果として返すことができます。
データ型 | 説明 |
---|
nil | これは最も単純な値 nil のみがこのクラスに属し、無効な値 (条件式の false に相当) を表します。 |
boolean | には、false と true の 2 つの値が含まれます。 |
number | 倍精度型の実浮動小数点数を表します |
string | 文字列は二重引用符または一重引用符のペアで表されます |
function | Cで書かれた関数またはLua |
userdata | は変数に格納された任意の C データ構造を表します |
thread | コルーチンを実行するための独立した実行ラインを表します |
table | Lua のテーブルは実際には「連想配列」です" (連想配列) の場合、配列のインデックスは数値または文字列になります。 Lua では、テーブルの作成は「構築式」によって行われます。最も単純な構築式は、空のテーブルを作成するために使用されます。 |
type 関数を使用して、指定された変数または値の型をテストできます:
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
nil (空)
nil 型は、有効な値を持たない型を表します。値は 1 つだけ、nil だけです。たとえば、代入なしで変数を出力すると、 nil 値が出力されます:
> print(type(a))
nil
>
グローバル変数とテーブルの場合、 nil には「削除」関数もあります。グローバル変数またはテーブル table 内の変数に nil 値を代入することは、削除と同等です。次のコードを実行します。
tab1 = { key1 = "val1", key2 = "val2", "val3" }
for k, v in pairs(tab1) do
print(k .. " - " .. v)
end
tab1.key1 = nil
for k, v in pairs(tab1) do
print(k .. " - " .. v)
end
boolean (ブール値)
boolean 型には true (true) と false (false) の 2 つの値しかありません。Lua は false と nil を「false」として扱います。 is "true" ":
print(type(true))
print(type(false))
print(type(nil))
if false or nil then
print("至少有一个是 true")
else
print("false 和 nil 都为 false!")
end
上記のコードの実行結果は次のとおりです。
$ lua test.lua
boolean
boolean
nil
false 和 nil 都为 false!
number (数値)
Lua のデフォルトの数値型は double (倍精度) 型の 1 つだけです (デフォルトの型はluaconf.h) で定義されているように変更できます。次のようにいくつかの書き込みメソッドが数値型とみなされます:
インスタンス
print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(0.2e-1))
print(type(7.8263692594256e-06))
インスタンスの実行»オンライン インスタンスを表示するには、[インスタンスの実行] ボタンをクリックします
上記コードの実行結果:
number
number
number
number
number
number
string (文字列)
文字列は二重引用符または一重引用符のペアで表されます。
string1 = "this is string1"
string2 = 'this is string2'
2 つの角括弧「[[]]」を使用して文字列の「ブロック」を表すこともできます。
html = [[
<html>
<head></head>
<body>
<a href="http://www.w3cschool.cc/">w3cschoolphp中文网</a>
</body>
</html>
]]
print(html)
次のコードの実行結果は次のとおりです:
<html>
<head></head>
<body>
<a href="http://www.w3cschool.cc/">w3cschoolphp中文网</a>
</body>
</html>
数値文字列に対して算術演算を実行する場合、Lua は数値文字列を数値に変換しようとします:
> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6
> print("-2e2" * "6")
-1200.0
> print("error" + 1)
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
stdin:1: in main chunk
[C]: in ?
>
上記のコードでは、「error」+ 1 は次のようになります。エラーを報告する はい、文字列連結では... を使用します。例:
> print("a" .. 'b')
ab
> print(157 .. 428)
157428
>
次の例に示すように、 # を使用して文字列の長さを計算し、文字列の前に置きます。
> len = "www.w3cschool.cc"
> print(#len)
16
> print(#"www.w3cschool.cc")
16
>
table (table )
Lua では、テーブルの作成は「構築式」によって行われます。最も単純な構築式は、空のテーブルを作成するために使用されます。テーブルにデータを追加してテーブルを直接初期化することもできます:
-- 创建一个空的 table
local tbl1 = {}
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
Lua のテーブルは実際には「連想配列」であり、配列のインデックスは数値または文字列にすることができます。
-- table_test.lua 脚本文件
a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
print(k .. " : " .. v)
end
スクリプトの実行結果は次のとおりです:
$ lua table_test.lua
key : value
10 : 33
配列の初期インデックスとして 0 を使用する他の言語の配列とは異なり、Lua のテーブルのデフォルトの初期インデックスは通常 1 から始まります。
-- table_test2.lua 脚本文件
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
print("Key", key)
end
スクリプトの実行結果は次のようになります。
$ lua table_test2.lua
Key 1
Key 2
Key 3
Key 4
テーブルの長さは固定されず、新しいデータが追加されると、テーブルの長さは初期化されていないものはすべて nil になります。
-- table_test3.lua 脚本文件
a3 = {}
for i = 1, 10 do
a3[i] = i
end
a3["key"] = "val"
print(a3["key"])
print(a3["none"])
スクリプトの実行結果は次のとおりです:
$ lua table_test3.lua
val
nil
function (関数)
Luaでは関数は「第一級の値」とみなされ、関数は変数に格納できます:
-- function_test.lua 脚本文件
function factorial1(n)
if n == 0 then
return 1
else
return n * factorial1(n - 1)
end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))
スクリプトの実行結果は次のとおりです:
$ lua function_test.lua
120
120
関数はパラメータを介して匿名関数として渡すことができます:
-- function_test2.lua 脚本文件
function anonymous(tab, fun)
for k, v in pairs(tab) do
print(fun(k, v))
end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab, function(key, val)
return key .. " = " .. val
end)
スクリプトの実行結果は次のとおりです:
$ lua function_test2.lua
key1 = val1
key2 = val2
thread (スレッド)
Lua では、メインスレッドは Coroutine です。これはスレッドに似ており、独自の独立したスタック、ローカル変数、命令ポインターを持ち、グローバル変数やその他のほとんどのものを他のコルーチンと共有できます。
スレッドとコルーチンの違い: スレッドは同時に複数回実行できますが、コルーチンはいつでも 1 つだけ実行でき、実行中のコルーチンは一時停止された場合にのみ一時停止されます。
userdata (カスタム型)
userdata はユーザー定義データの一種で、アプリケーションまたは C/C++ 言語ライブラリによって作成された型を表すために使用され、任意の C/C++ データ (通常は任意のデータ型) を変換できます。構造体とポインター) は Lua 変数に格納され、呼び出されます。