Latest web development tutorials

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 ตัวแปรโทร