Các hàm là các khối mã mà bạn có thể thi hành nhiều lần trên lệnh. Bạn cũng có thể kết nối chúng với sự kiện hoặc gắn chúng như một 0>mục tiêu0> .
Các chức năng cơ bản
Một định nghĩa chức năng bao gồm:
- phạm vi của hàm (toàn cầu hoặc local).
- The number keyword.
- Tên của chức năng trong camelCase .
- Các tham số của hàm trong dấu chung ( () ).
- Các khối mã, hoặc "thân", của chức năng.
- The end keyword.
Cơ thể của chức năng được thi hành khi bạn gọi chức năng. Để gọi một chức năng, hãy nhập tên của nó sau dấu chấm câu. Bạn có thể định nghĩa một biến để chấp nhận giá trị trả về hoặc sử dụng giá trị trả về nơi một biến.
-- Hàm này không có các tham số và trả về nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Gọi một hàm mà không có trả về
addOneAndTwo() -- 3
Các biến
Các biến là các biến mà bạn đã tạo cho chức năng và chỉ được sử dụng trong phạm vi của chức năng. Các chức năng không có biến mặc định. Nếu bạn gọi một chức năng với nhiều biến hơn nó mong đợi, Luau bỏ qua các biến thừa.
-- Hàm này có hai tham số: num1 và 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
Trở lại
Trong cơ thể của chức năng, return từ khóa trả lại kết quả từ một công thức. Bạn có thể trả lại nhiều giá trị từ một công thức. return kết thúc thi hành ch
-- Hàm này trả một giá trị trả về
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
-- Hàm này trả lại nhiều giá trị: tổng và khác biệt
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Gọi một hàm và mong đợi nhiều giá trị trả về
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Phương pháp
Các phương pháp là các chức năng là thành viên của một đối tượng, chẳng hạn như một lớp hoặc một bảng . Họ mong đợi đối tượng tự nhiên ( self ) là thứ n
Tất cả các对象 trong Roblox đều xuất phát từ Instance và có các phương pháp thông dụng bao gồm Instance:Destroy() , Instance:Clone() và 1> Class.Instance:FindFirstChild()1> .
-- Phá hủy một phần bằng dấu chấm (chức năng)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- Không gian làm việcfirstPart.Destroy(firstPart)print(firstPart.Parent) -- trương-- Phá hủy một phần bằng dấu chấm câu (phương pháp)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- Không gian làm việcsecondPart:Destroy()print(secondPart.Parent) -- nil
Định nghĩa phương thức
Để tạo một phương thức trong một bảng, hãy sử dụng tên của phương thức như là chìa khóa và chức năng phương thức như là giá trị. Trong định nghĩa của phương thức, self đề cập đến bảng cha của ph
Trong ví dụ sau đây, bảng testButton có một phương thức là giá trị của changeEnabled chìa khóa. Bạn có thể kiểm tra rằng self đề cập đến bảng cha của phương thức bằng cách in ra giá trị của 1> self.enabled1> .
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- đúng
-- Gọi phương thức
testButton:changeEnabled(false) -- false
Các hàm gọi
Callback là các hàm được gọi trong phản ứng để thực hiện một chức năng hoặc quy trình khác.
Gọi trả về cơ bản
Các chức năng có thể được gọi vào các chức năng khác, ví dụ, một chức năng ẩn có thể được sử dụng để thực hiện một hàm để lọc một danh sách table.sort() từ Players .
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Sử dụng một cuộc gọi ẩn để sắp xếp người chơi theo tên
return a.Name < b.Name
end)
Trong API Roblox, hàm gọi trả về thành viên hàm gọi chỉ đọc, hàm gọi trả về cho đến khi chúng trở lại. Các hàm gọi rộng rãi bao gồm:
- MarketplaceService.ProcessReceipt , which handle developer products purchases.
- BindableFunction.OnInvoke , which calls the function when a script calls BindableFunction:Invoke(...) .
- RemoteFunction.OnClientInvoke , which calls the function when the server calls RemoteFunction:FireClient(player, ...) or RemoteFunction:FireAllClients(...) .
- RemoteFunction.OnServerInvoke , which calls the function when a client calls RemoteFunction:InvokeServer(...) .
Để thiết lập một hàm gọi, hãy gán cho nó một chức năng. Ví dụ, BindableFunction.OnInvoke là một hàm gọi của
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Các kỹ thuật chức năng
Các hành xử sự kiện
Bạn có thể gán một chức năng, biết đến như một event handler , để thi hành khi một sự kiện bắt lửa. Ví dụ, bạn có thể tạo một chức năng tên là onPlayerAdded() cho sự kiện Players.PlayerAdded để in tên người
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Hàm chức vụ anonim
Bạn có thể tạo các hàm mà không có tên, được gọi là các hàm không có tên, để sử dụng như các hàm call-back và điều khiển sự kiện. Giống như các hà
Trong ví dụ sau đây, hàm gọi cho chức năng task.delay() và hàm gọi cho sự kiểm tra hệ thống cho sự kiểm tra hệ thống Players.PlayerAdded là cả hai hàm gọi anonim.
-- Hàm chức năng trong một hàm gọi để task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329944
end)
-- Hành động anonim trong một người điều khiển sự kiện
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Hàm trong ModuleScripts
Bạn có thể tái sử dụng các hàm trên nhiều tập tin bằng cách lưu chúng trong ModuleScripts . Các hàm là một đánh máydữ liệu Luau, vì vậy bạn có thể lưu chúng trong các bảng với các dữ liệu khác.
Hàm Vô Biến
Một hàm biến đổi nhận bất kỳ số lượng các lý do. Ví dụ, Globals.LuaGlobals.print() là một hàm biến đổi.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- Bánh là một lời nói dối!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Định nghĩa các hàm đa biến
Để định nghĩa một hàm biến, bạn sử dụng token ... làm tham số cuối cùng (không phải là .. , nối hệ thống ) . Bạn có thể đặt giá trị 2>...2> vào một bảng để dễ dàng sử dụng.
local function variadic(named, ...)
local arguments = {...} -- gói các引数 bổ sung vào một bảng
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Kết quả ra:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Điều chỉnh giải nghĩa
Bạn có thể định nghĩa các hàm đa biến như các wrapping xung quanh các hàm khác để vé, hoặc tiến, các đại diện từ wrappers đến các hàm khác.
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)
--[[ Kết quả ra:
Before
x = 1
y + z = 5
After
]]
Gọi một chức năng biến đổi với ma trận
Nếu bạn muốn truyền một table table of values to a global variadic function, such as print() , you can use the global unpack() function to truyền các giá trị của table thay vì table itself.
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