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 ++データとすることができることを示し変数を呼び出します。