Tạo table và unpack()
Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 6 trên 54.
unpack(). Những kỹ thuật này đặc biệt hữu ích khi làm việc với các hàm cần xử lý đối số linh hoạt.Bạn có thể gom nhiều giá trị vào một bảng dạng danh sách bằng cú pháp khởi tạo bảng với dấu ngoặc nhọn. Cách này gom tất cả giá trị vào một cấu trúc bảng duy nhất.local args = {10, 20, 30}
print(args[1]) -- Đầu ra: 10
print(#args) -- Đầu ra: 3unpack() làm điều ngược lại. Hàm này nhận một bảng dạng danh sách và trả về tất cả phần tử dưới dạng các giá trị riêng biệt. Nhờ vậy, bạn có thể truyền nội dung của bảng làm các đối số riêng biệt cho một hàm.Quan trọng: Mặc dù các phiên bản Lua mới hơn (5.2+) đã chuyển hàm này sang table.unpack(), môi trường này chạy Lua 5.1, vì vậy bạn phải dùng hàm toàn cục unpack().local numbers = {5, 10, 15}
print(unpack(numbers)) -- Đầu ra: 5 10 15Thử thách
DễViết một hàm forwardArguments nhận vào ba số a, b và c, rồi trả về tổng của chúng bằng cách tạo bảng và dùng unpack().
Tạo một bảng chứa ba đối số bằng cú pháp {a, b, c}, sau đó giải nén các giá trị và truyền chúng cho một hàm khác để tính tổng.
Lưu ý: Hãy dùng hàm toàn cục unpack() thay vì table.unpack() để đảm bảo tương thích với môi trường này.
Logic:
- Dùng
{a, b, c}để tạo một bảng chứa cả ba đối số - Tạo một hàm riêng tên là
sum, nhận ba tham số và trả về tổng của chúng - Dùng
unpack()để truyền các giá trị trong bảng cho hàmsum - Trả về kết quả từ hàm
sum
Tham số:
a(số): Số thứ nhấtb(số): Số thứ haic(số): Số thứ ba
Giá trị trả về: Tổng của cả ba số (số)
Tự làm thử
function forwardArguments(a, b, c)
-- Tạo một hàm (function) riêng để tính tổng
-- Tạo một bảng chứa cả ba đối số (argument)
-- Giải nén bảng và truyền các giá trị vào hàm tính tổng
-- Gợi ý: Dùng hàm toàn cục 'unpack' để mở rộng các đối số trong bảng
endBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
2Các hàm khác của thư viện table
table.concat()Tạo table và unpack()table.sort()Sắp xếp tùy chỉnh bằng hàmÔn tập: Bảng điểm cao5Dự án: Bộ máy trò chơi phiêu lưu bằng văn bản
Thiết lập dự án: Căn phòngLiên kết các phòngTự luyện tập: Trình biên dịch Lua online