Latest web development tutorials

Luaのデータ型

Luaは、動的型付け言語であり、変数、型定義は、変数に値を割り当てるだけでは必要ありません。 値は、変数に格納されているパラメータとして渡されたかの結果を返すことができます。

Luaは8つの基本タイプがありました:nilで、ブール値、数値、文字列、ユーザーデータ、関数、スレッドとテーブル。

データの種類 説明
ゼロ このクラスに属するnilを最も単純な、唯一の値は、(条件式ではfalseに相当)の無効な値を示しています。
ブーリアン 偽と真:それは2つの値が含まれています。
これは、倍精度浮動小数点実数の型を表します
文字列 表現するために、二重引用符または一重引用符のペアによって文字列
関数 またはC関数でLuaの中に書かれました
ユーザデータ Cは、変数に格納されている任意のデータ構造を表します
スレッド その協同プログラムの実施のための別の行の実装
テーブル Luaのテーブル(表)は、実際には「連想配列」(連想配列)で、配列のインデックスは、数値または文字列を指定できます。 ルアでは、テーブルは、{}空のテーブルを作成するために使用される最も簡単な発現構築物を完成するために、「発現構築物」によって作成されます。

私たちは、与えられた変数または値の種類をテストするタイプの機能を使用することができます。

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が、ない、それは出力がnilの値は以下となります。

> print(type(a))
nil
>

グローバル変数とテーブル、ゼロと「削除」アクションのために、それらを削除するのと同じ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

ブール値(ブール値)

(偽)がtrue(真)とfalse、Luaの、「偽」の他、「真」として偽とnilに:boolean型は、2つの値のみを持ちます。

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!

数値(デジタル)

Luaのデフォルトは、一つだけの数のタイプである - ダブル(倍精度)、以下の文言が数値型であることが示されている(デフォルトのタイプは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

文字列(文字列)

表現するために、二重引用符または一重引用符のペアによって文字列。

string1 = "this is string1"
string2 = 'this is string2'

また、 "1"の文字列を意味する "[[]]「2つのブラケットを使用することができます。

html = [[
<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>
]]
print(html)

次のコードの実行結果:

<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</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 ?
> 

上記のコード "エラー" + 1実行エラー、..、のような使用して文字列連結:

> print("a" .. 'b')
ab
> print(157 .. 428)
157428
> 

例次の前面に文字列、文字列の長さを計算するために#を使用します。

> len = "www.w3cschool.cc"
> print(#len)
16
> print(#"www.w3cschool.cc")
16
> 

テーブル(表)

ルアでは、テーブルは、{}空のテーブルを作成するために使用される最も簡単な発現構築物を完成するために、「発現構築物」によって作成されます。 また、テーブルに直接初期化テーブルをいくつかのデータを追加することができます。

-- 创建一个空的 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

Luaのテーブル内の最初のインデックス0、デフォルトの初期インデックスの配列として配列の他の言語とは異なり、一般的に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

機能(関数)

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

スレッド(スレッド)

Luaのでは、メインスレッドは、共同プログラム(コルーチン)です。 それはほとんど独自の独立スタック、ローカル変数と命令ポインタを持っているスレッド(スレッド)である、あなたは他の共同プログラムでグローバル変数や他のものの大部分を共有することができます。

コルーチンとスレッドの違い:複数のスレッドが同時に実行できる、とコルーチンが唯一の任意の時点で1を実行することができ、および一時停止した場合にのみ実行されているコルーチンのみハング(サスペンド)。


ユーザデータ(カスタムタイプ)

ユーザデータは、アプリケーションによって使用されるユーザー定義のデータ型であるか、C / C ++言語ライブラリ作成のLUAに保存されている任意のデータ型(通常は構造体とポインタ)のいずれかのC / C ++データとすることができることを示し変数を呼び出します。