Jenis data Lua
Lua ialah bahasa yang ditaip secara dinamik Pembolehubah tidak perlu ditaip, hanya pembolehubah perlu diberikan nilai. Nilai boleh disimpan dalam pembolehubah, diluluskan sebagai hujah atau dikembalikan sebagai hasil.
Terdapat 8 jenis asas dalam Lua: nol, boolean, nombor, rentetan, data pengguna, fungsi, benang dan jadual.
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
Kita boleh menggunakan fungsi jenis untuk menguji jenis pembolehubah atau nilai yang diberikan:
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 (null)
nil type mewakili jenis yang tidak mempunyai sebarang nilai yang sah, ia hanya mempunyai satu Nilai -- nil, contohnya, mencetak pembolehubah tanpa nilai yang ditetapkan akan mengeluarkan nilai nil:
> print(type(a)) nil >
Untuk pembolehubah dan jadual global, nil juga mempunyai fungsi "padam", yang digunakan untuk memadam pembolehubah global atau jadual. Memberikan nilai sifar kepada pembolehubah adalah sama dengan memadamkannya Anda akan mengetahui dengan melaksanakan kod berikut:
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)
<🎜. >jenis boolean hanya mempunyai dua nilai pilihan: true ( true) dan false (false), Lua menganggap false dan nil sebagai "false", dan semua yang lain adalah "true":print(type(true)) print(type(false)) print(type(nil)) if false or nil then print("至少有一个是 true") else print("false 和 nil 都为 false!") endHasil pelaksanaan di atas kod adalah seperti berikut:
$ lua test.lua boolean boolean nil false 和 nil 都为 false!
nombor (nombor)Lua hanya mempunyai satu jenis nombor secara lalai - jenis double (double precision) (jenis lalai boleh diubah suai dalam luaconf. h), kaedah penulisan berikut dianggap sebagai jenis nombor :
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))
Run Instance»Klik Butang "Jalankan Instance" untuk melihat contoh dalam talian
Hasil pelaksanaan kod di atas:
number number number number number number
rentetan (rentetan)
Rentetan diwakili oleh sepasang petikan berganda atau petikan tunggal.
string1 = "this is string1" string2 = 'this is string2'
Anda juga boleh menggunakan 2 kurungan segi empat sama "[[]]" untuk mewakili "blok" rentetan.
html = [[ <html> <head></head> <body> <a href="http://www.w3cschool.cc/">w3cschoolphp中文网</a> </body> </html> ]] print(html)
Hasil pelaksanaan kod berikut ialah:
<html> <head></head> <body> <a href="http://www.w3cschool.cc/">w3cschoolphp中文网</a> </body> </html>
Apabila melakukan operasi aritmetik pada rentetan berangka, Lua akan cuba menukar rentetan angka kepada nombor:
> 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 ? >
Dalam kod di atas, "ralat" + 1 dilaksanakan dan ralat dilaporkan Sambungan rentetan menggunakan .., seperti:
> print("a" .. 'b') ab > print(157 .. 428) 157428 >
Gunakan # untuk mengira panjang rentetan dan letakkannya di hadapan. daripada rentetan, seperti yang ditunjukkan dalam contoh berikut:
> len = "www.w3cschool.cc" > print(#len) 16 > print(#"www.w3cschool.cc") 16 >
jadual (jadual)
Dalam Lua, penciptaan jadual diselesaikan melalui "ungkapan pembinaan yang paling mudah". ialah {}, yang digunakan untuk mencipta jadual Kosong. Anda juga boleh menambah beberapa data pada jadual dan memulakan jadual secara langsung:
-- 创建一个空的 table local tbl1 = {} -- 直接初始表 local tbl2 = {"apple", "pear", "orange", "grape"}
Jadual dalam Lua sebenarnya ialah "tatasusunan bersekutu", dan indeks tatasusunan boleh menjadi nombor atau rentetan.
-- 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
Hasil pelaksanaan skrip ialah:
$ lua table_test.lua key : value 10 : 33
Tidak seperti tatasusunan dalam bahasa lain, yang menggunakan 0 sebagai indeks awal tatasusunan, indeks awal lalai jadual dalam Lua biasanya bermula dengan 1 .
-- table_test2.lua 脚本文件 local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Key", key) end
Hasil pelaksanaan skrip ialah:
$ lua table_test2.lua Key 1 Key 2 Key 3 Key 4
jadual tidak akan mempunyai panjang tetap Apabila data baharu ditambah, panjang jadual akan berkembang secara automatik tiada.
-- table_test3.lua 脚本文件 a3 = {} for i = 1, 10 do a3[i] = i end a3["key"] = "val" print(a3["key"]) print(a3["none"])
Hasil pelaksanaan skrip ialah:
$ lua table_test3.lua val nil
fungsi (fungsi)
Dalam Lua, fungsi dianggap sebagai "nilai kelas pertama (Pertama- Nilai Kelas)", fungsi boleh disimpan dalam pembolehubah:
-- 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))
Hasil pelaksanaan skrip ialah:
$ lua function_test.lua 120 120
fungsi boleh dihantar sebagai fungsi tanpa nama melalui parameter:
-- 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)
Hasil pelaksanaan skrip ialah:
$ lua function_test2.lua key1 = val1 key2 = val2
benang (benang)
Di Lua, utas paling penting ialah coroutine. Ia serupa dengan utas dan mempunyai tindanan bebas sendiri, pembolehubah tempatan dan penunjuk arahan Ia boleh berkongsi pembolehubah global dan kebanyakan perkara lain dengan coroutine lain.
Perbezaan antara thread dan coroutine: thread boleh dijalankan beberapa kali pada masa yang sama, tetapi coroutine hanya boleh dijalankan satu pada bila-bila masa dan coroutine yang sedang berjalan hanya akan digantung apabila ia digantung.
data pengguna (jenis tersuai)
data pengguna ialah jenis data yang ditentukan pengguna yang digunakan untuk mewakili jenis yang dicipta oleh aplikasi atau pustaka bahasa C/C++ Jenis data C/C++ (biasanya struct dan penunjuk) ke dalam pembolehubah Lua dan memanggilnya.