หน้ากากเรื่องตลก เป็น บล็อกของโค้ด ที่คุณสามารถประมวลผลได้หลายครั้งตามคำสั่ง คุณยังสามารถเชื่อมต่อพวกเขาไปยัง อีเวนต์ หรือกำหนดให้เป็น 0> คําเรียกแ
ฟังก์ชันพื้นฐาน
คำอธิบายของฟังก์ชันรวมถึง:
- สเก็บ ของเรือ ของฟังก์ชัน (โลกหรือ local )
- คําว่าด้วย function คํา
- ชื่อของฟังก์ชันใน camelCase
- ค่าตัวแปรของฟังก์ชันในเชิญ ( () )
- บล็อกของโค้ดหรือ "ร่างกาย" ของฟังก์ชัน
- คำว่า end
ร่างกายของฟังก์ชันดำเนินการเมื่อคุณเรียกฟังก์ชัน เพื่อเรียกฟังก์ชันให้พิมพ์ชื่อของมันติดอันดับกับเครื่องหมายกำกับ คุณสามารถกำหนดแป้นที่จะยอมรับค่ากลับหรือใช้ค่ากลับในที่แป้น
-- ฟังก์ชันนี้ไม่มีพารามิเตอร์และกลับมาเป็นศูนย์
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- การโทรคุณสมบัติฟังก์ชันโดยไม่มีการกลับ
addOneAndTwo() -- 3
ตัวแปร
ตัวแปรเป็นแปรที่คุณสร้างให้กับคุณสมบัติและใช้เฉพาะในคุณสมบัติของฟังก์ชันเท่านั้น ฟังก์ชันไม่มีตัวแปรโดยปกติ หากคุณเรียกฟังก์ชันด้วยมาร์คเกอร์มาก
-- ฟังก์ชันนี้มีสองตัวอักษร: num1 และ num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- attempt to perform arithmetic (add) on number and nil
กลับ
ในตัวของฟังก์ชัน, คำว่า return กลับผลจากการคำนวณ คุณสามารถกลับผลหลายตัวจากคำฟังก์ชันเดียว return จะจบกา
-- ฟังก์ชันนี้กลับมาหนึ่งค่าการกลับ
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3
local seven = addNumbers(3, 4)
print(seven) -- 7
-- ฟังก์ชันนี้กลับมาหลายค่า: จำนวนและความแตกต่าง
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- การโทรคุณสมบัติและคาดหวังผลการกลับมาหลายรายการ
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
วิธี
วิธีเป็นคุณสมบัติของสมาชิกของวัตถุ เช่น คลาส หรือ ตาราง พวกเขาคาดหวังว่าวัตถุเอง ( self ) เป็นอาร์กุณต์แรก
เหล้านวัตถุใน Roblox ล้างลงจาก Instance และมีวิธีการใช้งานทั่วไปรวมถึง Instance:Destroy()``Class.Instance:Clone() และ 1> Class.Instance:FindFirstChild()1>
-- การทำลายส่วนหนึ่งด้วยเครื่องหมายจุลภาค (ฟังก์ชัน)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- พื้นที่ทํางานfirstPart.Destroy(firstPart)print(firstPart.Parent) -- ไม่มี-- การทำลายส่วนด้วยเครื่องหมาย colon (วิธี)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- พื้นที่ทํางานsecondPart:Destroy()print(secondPart.Parent) -- nil
การกำหนดวิธี
เพื่อสร้างวิธีในตารางให้ใช้ชื่อวิธีเป็นสมุดเข็มและค่าวิธีเป็นตัวอย่าง ในการจัดลำดับของวิธี self ตัวแปรระบุวิธีของคุณ เมื่อคุณ
ในตัวอย่างต่อไปนี้, ตาราง testButton มีวิธีเป็นค่าของ changeEnabled กุญแจ. คุณสามารถตรวจสอบว่า self เป็นสิ่งที่อ้างอิงไปยังตารางพ่อของวิธีด้วยการพิมพ์
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- จริง
-- เรียกวิธี
testButton:changeEnabled(false) -- false
คอลแล็ค
คอลแล็คเป็นระเบียบาลที่ประมวลผลตามคำขออื่นหรือกระบวนการ
การโทรกลับพื้นฐาน
ฟังก์ชันสามารถถูกผ่านไปยังฟังก์ชันอื่น เช่นฟังก์ชัน ปลอม สามารถใช้เพื่อให้สามารถดำเนินการได้ table.sort() แล้วใช้เพื่อเรียงลำดับรายการ <
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- ใช้คอลแล็กชันอันนุกรมเพื่อจัดเรียงผู้เล่นตามชื่อ
return a.Name < b.Name
end)
ใน API Roblox คอลแล็กชันเรียกคืนสมาชิกคุณสมบัติที่เขียนโดยเฉพาะ คอลแล็กชันเรียกคืนจะนำเสนอจนกว่าพวกเขาจะกลับมา คอลแล็กชันเรียกคืนที่ใช้กันอย่างแพร่หลายรวมถึง:
- MarketplaceService.ProcessReceipt ซึ่งจัดการการซื้อผลิตภัณฑ์ของผู้พัฒนา
- BindableFunction.OnInvoke ซึ่งเรียกฟังก์ชันเมื่อสคริปต์เรียก BindableFunction:Invoke(...)
- RemoteFunction.OnClientInvoke ซึ่งเรียกฟังก์ชันเมื่อเซิร์ฟเวอร์เรียก RemoteFunction:FireClient(player, ...) หรือ RemoteFunction:FireAllClients(...)
- RemoteFunction.OnServerInvoke ซึ่งเรียกฟังก์ชันเมื่อลูกค้าโทร RemoteFunction:InvokeServer(...)
เพื่อตั้งค่าคันธนูให้กับมันให้มันมีฟังก์ชัน เช่น BindableFunction.OnInvoke เป็นคั
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
เทคนิคการใช้งาน
ตัวจัดการอีเวนต์
คุณสามารถกำหนดคุณสมบัติที่เรียกว่า ตัวแปรจดหมายเหตุเมื่อเหตุการณ์เกิดขึ้น เพื่อดำเนินการเมื่อเหตุการณ์เกิดขึ้น ตัวอย่างเช่น คุณสาม
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
ฟังก์ชันการปกปิดตัว
คุณสามารถสร้างฟังก์ชันโดยไม่มีชื่อที่เป็นที่รู้จักในนาม ฟังก
ในตัวอย่างต่อไปนี้คําเรียกสําหรับฟังก์ชัน task.delay() และตัวเร่งอีเว้นท์สําหรับฟังก์ชัน Players.PlayerAdded ทั้งสองเป็นฟังก์ชันที่ปลอมตัว
-- การทำงานแบบไม่ระบุในคันธูปโปรแกรมที่แสวงหา()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- การทำงานแบบไม่ระบุตัวตนในตัวแทนอีเมนต์
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
หน้าต่างในModuleScripts
คุณสามารถใช้ฟังก์ชันเหล่านี้ได้หลายครั้งในหลายสคริปโดยเก็บพวกเขาใน ModuleScripts พิมพ์Luau ดังนั้นคุณจึงสามารถเก็บพวกเขาในตารางกับข้อมูลอื่นๆ
คุณสมบัติต่างๆ
คุณสมบัติตัวแปรรับตัวอักษรใด ๆ จำนวนอะไรก็ได้ เช่น Globals.LuaGlobals.print() คือคุณสมบัติตัวแปร
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- เค้กเป็นเรื่องโกหก!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
กำหนดค่าตัวแปรที่น่าสนใจ
เพื่อกำหนดคุณสมบัติต่างๆ คุณใช้ตัวแทน ... เป็นตัวประกอบสุดท้าย (ไม่ใช่ .. เครื่องดำเนินการ) คุณสามารถใส่ค่า ... ในตารางเพื่อความสะดวกใน
local function variadic(named, ...)
local arguments = {...} -- แพ็คอาร์กิตริกเพิ่มเติมลงในตาราง
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ ผลลัพธ์ออก:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
การนำสมุดอัตรา
คุณสามารถจำกัดคุณสมบัติของระบบค่าตัวแปรได้โดยการหุ้มรอบค่าตัวแปรอื่นเพื่อส่งหรือส่งต่ออาร์กิวเมนต์จากระบบค่าตัวแปรไปยังอาร์กิวเมนต์อื่น
local function printAround(functionToPrintAround, ...)
print("Before")
functionToPrintAround(...)
print("After")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ ผลลัพธ์ออก:
Before
x = 1
y + z = 5
After
]]
การเรียกคุณสมบัติแบบผสมผสานด้วยแมทริค
หากคุณต้องการส่งรายการแท็บของค่าไปยังฟังก์ชัน global เช่น print() คุณสามารถใช้คุณสมบัติ global unpack() เพื่อส่งค่าของแท็บแทนที่จะเป็นแท็บเอง
local squares = {1, 4, 9, 16, 25}print("The first 5 square numbers are:", unpack(squares))-- The first 5 square numbers are 1 4 9 16 25