Menu
CoddyTech

Metatable là gì?

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 16 trên 54.

Metatable chỉ đơn giản là một bảng Lua thông thường, nhưng có mục đích đặc biệt. Khi gắn một metatable vào một bảng khác (ta gọi bảng đó là bảng “chính”), bạn có thể thay đổi cách bảng chính hoạt động khi thực hiện một số thao tác nhất định trên bảng đó.

Hãy hình dung như thế này: thông thường, nếu bạn thử cộng hai bảng với nhau bằng toán tử +, Lua sẽ không biết phải làm gì và báo lỗi. Nhưng với siêu bảng, bạn có thể định nghĩa phép cộng có ý nghĩa gì đối với các bảng của mình. Bạn có thể để phép cộng cộng các giá trị tương ứng, nối nội dung của chúng hoặc làm bất cứ điều gì khác phù hợp với chương trình của bạn.

Metatable hoạt động bằng cách định nghĩa các hàm đặc biệt gọi là phương thức meta (metamethod). Những phương thức meta này có tên cụ thể bắt đầu bằng hai dấu gạch dưới, chẳng hạn như __add để thực hiện phép cộng hoặc __index để tra cứu các khóa còn thiếu. Khi Lua gặp một phép toán trên bảng có metatable, Lua sẽ kiểm tra xem metatable có phương thức meta tương ứng hay không và dùng phương thức đó để xác định việc cần làm.

Khái niệm này mở ra nhiều khả năng như tạo kiểu dữ liệu tùy chỉnh với hành vi riêng, triển khai các mẫu hướng đối tượng, bảo vệ bảng khỏi những sửa đổi không mong muốn và nhiều hơn nữa. Trong các bài học tiếp theo, bạn sẽ học cách gắn metatable vào bảng và dùng metamethod để tùy chỉnh hành vi của chúng.

Tự làm thử

Bài học này không có thử thách code.

quiz iconTự kiểm tra

Bà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

Tự luyện tập: Trình biên dịch Lua online