Lua - Mô-đun
Mô-đun là gì?
Mô-đun giống như một thư viện có thể được tải bằng yêu cầu và có một tên chung duy nhất chứa một bảng. Mô-đun này có thể bao gồm một số hàm và biến. Tất cả các hàm và biến này được bao bọc trong bảng, hoạt động như một không gian tên. Ngoài ra, một mô-đun hoạt động tốt có các điều khoản cần thiết để trả lại bảng này theo yêu cầu.
Tính đặc biệt của Mô-đun Lua
Việc sử dụng các bảng trong mô-đun giúp chúng tôi theo nhiều cách và cho phép chúng tôi thao tác các mô-đun giống như cách chúng tôi thao tác với bất kỳ bảng Lua nào khác. Do khả năng thao tác với các mô-đun, nó cung cấp các tính năng bổ sung mà các ngôn ngữ khác cần các cơ chế đặc biệt. Do cơ chế miễn phí này của các mô-đun trong Lua, người dùng có thể gọi các hàm trong Lua theo nhiều cách. Một vài trong số chúng được hiển thị bên dưới.
-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")
-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")
-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")
Trong đoạn mã mẫu ở trên, bạn có thể thấy cách lập trình linh hoạt trong Lua mà không cần bất kỳ mã bổ sung đặc biệt nào.
Chức năng yêu cầu
Lua đã cung cấp một chức năng cấp cao được gọi là request để tải tất cả các mô-đun cần thiết. Nó được giữ đơn giản nhất có thể để tránh có quá nhiều thông tin trên mô-đun để tải nó. Hàm request chỉ giả sử các mô-đun như một đoạn mã xác định một số giá trị, thực sự là các hàm hoặc bảng chứa các hàm.
Thí dụ
Chúng ta hãy xem xét một ví dụ đơn giản, trong đó một hàm có các hàm toán học. Hãy gọi mô-đun này là mymath và tên tệp là mymath.lua. Nội dung tệp như sau:
local mymath = {}
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
return mymath
Bây giờ, để truy cập mô-đun Lua này trong một tệp khác, chẳng hạn như moduletutorial.lua, bạn cần sử dụng đoạn mã sau.
mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)
Để chạy mã này, chúng ta cần đặt hai tệp Lua trong cùng một thư mục hoặc cách khác, bạn có thể đặt tệp mô-đun trong đường dẫn gói và nó cần thiết lập thêm. Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau.
30
10
200
1.5
Những điều cần ghi nhớ
Đặt cả mô-đun và tệp bạn chạy trong cùng một thư mục.
Tên mô-đun và tên tệp của nó phải giống nhau.
Cách tốt nhất là trả về các mô-đun cho chức năng yêu cầu và do đó mô-đun nên được triển khai như được hiển thị ở trên mặc dù bạn có thể tìm thấy các kiểu triển khai khác ở nơi khác.
Cách thực hiện mô-đun cũ
Bây giờ hãy để tôi viết lại cùng một ví dụ theo cách cũ hơn, sử dụng kiểu triển khai package.seeall. Điều này đã được sử dụng trong các phiên bản Lua 5.1 và 5.0. Mô-đun thần thoại được hiển thị bên dưới.
module("mymath", package.seeall)
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
Cách sử dụng các mô-đun trong moduletutorial.lua được hiển thị bên dưới.
require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)
Khi chúng tôi chạy ở trên, chúng tôi sẽ nhận được cùng một đầu ra. Nhưng người ta khuyên bạn nên sử dụng phiên bản mã cũ hơn và nó được cho là kém an toàn hơn. Nhiều SDK sử dụng Lua để lập trình như Corona SDK đã không còn sử dụng tính năng này.