Module trong Ruby
1. Giới thiệu Một trong những công cụ mạnh nhất của Ruby on Rails là Module. Vậy module là gì? Module là một tập các phương thức, lớp, hằng số, do đó module cũng gần giống như class, chỉ khác là module không thể tạo các đối tượng và không thể thừa kế. Thường thì chúng ta sẽ gộp các lớp, ...
1. Giới thiệu
Một trong những công cụ mạnh nhất của Ruby on Rails là Module. Vậy module là gì?
Module là một tập các phương thức, lớp, hằng số, do đó module cũng gần giống như class, chỉ khác là module không thể tạo các đối tượng và không thể thừa kế.
Thường thì chúng ta sẽ gộp các lớp, phương thức và hằng số có liên quan với nhau vào một module để tránh xung đột tên. Nếu bạn đã từng làm việc với C# và Java thì có thể nói module trong Ruby tương đương với namespace trong C# và package trong Java vậy.
2. Cách khai báo và sử dụng
Dưới đây, là cách mà chúng ta tạo ra một module ở trong Ruby. Thực sự rất rất đơn giản.
module MyFirstModule
def say_hello
puts “Hello, I am a Module”
end
end
Trong Ruby, có 2 cách sử dụng method của module:
- mixin - nhúng và dùng như instance method
- module function
// Cách 1:
Class Greeter
include MyFirstModule
end
// Cách 2:
module MyFirstModule
def self.say_hello
puts “Hello, I am a Module”
end
end
// Khi vừa muốn được mixin và muốn được sử dụng như module function
module MyFirstModule
def self.say_hello
puts “Hello, I am a Module”
end
module_function :say_hello
end
class Greeter
include MyFirstModule
end
// Call method:
Greeter.new.say_hello
MyFirstModule.say_hello
Để sử dụng được các method của module ở trong các class chúng ta thường include hay extend những module này vào trong các class đó. include hay extend module vào trong một class, nghĩa là class đó có thể access các phương thức được khai báo ở trong module.
- include: mixes các method ở module như là instance method trong class.
- extend: mixes các method ở module như là class method trong class.
class A include MyFirstModule end class B extend MyFirstModule end => call method of module A.new.say_hello B.say_hello
Bài viết này chỉ dừng lại ở việc giới thiệu chung ở mức cơ bản về cách khai báo và sử dụng module. Hi vọng bài viết sẽ hữu ích.
Thanks for your reading!
Tham khảo: http://tutorials.jumpstartlab.com/topics/models/modules.html