Lua ชนิดข้อมูล
Lua เป็นภาษาพิมพ์แบบไดนามิกตัวแปรประเภทคำจำกัดความไม่จำเป็นเพียงกำหนดค่าตัวแปร ค่าสามารถเก็บไว้ในตัวแปรผ่านเป็นพารามิเตอร์หรือส่งกลับผลลัพธ์
Lua มีแปดประเภทพื้นฐานคือ: ศูนย์บูลีนจำนวนสตริง UserData ฟังก์ชั่น, ด้ายและโต๊ะ
ชนิดข้อมูล | ลักษณะ |
---|---|
ศูนย์ | ที่ง่ายที่สุดเพียงค่าที่ไม่มีอยู่ในชั้นนี้แสดงให้เห็นถึงค่าไม่ถูกต้อง (เทียบเท่าเท็จในนิพจน์เงื่อนไข) |
บูลีน | มันมีสองค่า: เท็จและเป็นความจริง |
จำนวน | เพราะมันหมายถึงประเภทของความแม่นยำสองจุดลอยตัวจริง |
เชือก | สตริงโดยคู่ของคำพูดคู่หรือเดียวที่จะเป็นตัวแทน |
ฟังก์ชัน | หรือฟังก์ชัน C ที่เขียนใน Lua |
UserData | C หมายถึงโครงสร้างข้อมูลที่เก็บไว้ในตัวแปร |
ด้าย | ว่าการดำเนินงานของสายแยกต่างหากสำหรับการดำเนินการของโปรแกรมสหกรณ์ |
ตาราง | ตาราง Lua (ตาราง) เป็นจริง "อาเรย์" (เชื่อมโยงอาร์เรย์) ดัชนีของอาร์เรย์สามารถเป็นตัวเลขหรือสตริง ใน 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
ศูนย์ (ว่าง)
ศูนย์ไม่ได้มีวิธีใดที่บ่งชี้ค่าที่ถูกต้องมันก็เป็นเพียงหนึ่งค่า - ไม่มีเช่นการพิมพ์การกำหนดตัวแปรไม่ได้ก็จะออกค่าเป็นศูนย์:
> print(type(a)) 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
บูลีน (บูลีน)
ประเภทบูลีนมีเพียงสองค่าที่เป็นไป: จริง (จริง) และเท็จ (false) Lua เป็นเท็จและเป็นศูนย์ "false" อื่น ๆ "จริง":
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!
ตัวเลข (Digital)
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
สตริง (String)
สตริงโดยคู่ของคำพูดคู่หรือเดียวที่จะเป็นตัวแทน
string1 = "this is string1" string2 = 'this is string2'
นอกจากนี้คุณยังสามารถใช้สองวงเล็บ "[[]]" หมายถึง "หนึ่ง" สตริง
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 ข้อผิดพลาดการดำเนินการ concatenation สตริงโดยใช้ .. เช่น:
> print("a" .. 'b') ab > print(157 .. 428) 157428 >
ใช้ # เพื่อคำนวณความยาวของสตริงสตริงที่ด้านหน้าต่อไปตัวอย่าง:
> len = "www.w3cschool.cc" > print(#len) 16 > print(#"www.w3cschool.cc") 16 >
ตาราง (ตาราง)
ใน 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
ขนาดโต๊ะไม่คงที่ยาวมีการเพิ่มขึ้นโดยอัตโนมัติในความยาวของตารางเพื่อเพิ่มข้อมูลใหม่ตารางเดิมไม่ได้เป็นศูนย์
-- 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, ฟังก์ชั่นถือว่าเป็น "ค่านิยมชั้นแรก (First-Class Value)" อาจจะมีฟังก์ชั่นการศึกษา:
-- 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
ด้าย (ด้าย)
ในลัวะหัวข้อหลักเป็นโปรแกรมที่มีการทำงานร่วมกัน (coroutine) มันขึ้นอยู่กับด้าย (ด้าย) เกือบจะมีสแต็คของตัวเองเป็นอิสระตัวแปรท้องถิ่นและการสอนชี้คุณสามารถแบ่งปันตัวแปรทั่วโลกและส่วนใหญ่ของสิ่งอื่น ๆ ที่ทำงานร่วมกันกับโปรแกรมอื่น ๆ
ความแตกต่างกับกระทู้ coroutines: หลายหัวข้อสามารถทำงานพร้อมกันและ coroutine สามารถทำงานอย่างใดอย่างหนึ่งในเวลาใด ๆ และทำงาน coroutine เพียงแขวน (ระงับ) เท่านั้นเมื่อหยุดชั่วคราว
UserData (ชนิดที่กำหนดเอง)
UserData เป็นผู้ใช้กำหนดชนิดข้อมูลที่ใช้โดยโปรแกรมประยุกต์ที่บ่งชี้หรือ C / C ++ ห้องสมุดภาษาที่สร้างขึ้นสามารถ C ข้อมูลใด ๆ / C ++ ประเภทข้อมูลใด ๆ (มักจะเป็น struct และตัวชี้) เก็บไว้ใน Lua ตัวแปรโทร