dân đã đưa ra một số ví dụ tốt đẹp ở đây nhưng bạn có thể tạo và các module sử dụng theo cách sau đây cũng (Mixins)
Module để được bao gồm
#instance_methods.rb
module MyInstanceMethods
def foo
puts 'instance method foo called'
end
end
Module để được mở rộng
#class_methods.rb
module MyClassMethods
def bar
puts 'class method bar called'
end
end
Bao gồm phương pháp mô-đun hành động như thể chúng là phương pháp thể hiện của lớp, trong đó các mô-đun được bao gồm
require 'instance_methods.rb'
class MyClass
include MyInstanceMethods
end
my_obj = MyClass.new
my_obj.foo #prints instance method foo called
MyClass.foo #Results into error as method is an instance method, _not_ a class method.
Extended phương pháp mô-đun hành động như thể chúng là phương pháp lớp học của lớp, trong đó các mô-đun được bao gồm
require 'class_methods.rb'
class MyClass
extend MyClassMethods
end
my_obj = MyClass.new
my_obj.bar #Results into error as method is a class method, _not_ an instance method.
MyClass.bar #prints class method bar called
Bạn thậm chí có thể mở rộng mô-đun chỉ cho một đối tượng cụ thể của lớp học.Vì mục đích đó thay vì mở rộng các mô-đun bên trong lớp, bạn làm điều gì đó như
my_obj.extend MyClassMethods
Bằng cách này, chỉ có my_object
sẽ có quyền truy cập vào MyClassMethods
phương pháp mô-đun và không trường hợp khác của lớp mà my_object thuộc. Các mô đun rất mạnh mẽ. Bạn có thể tìm hiểu quặng về chúng bằng cách sử dụng core API documentation
Xin lỗi nếu có bất kỳ sai lầm ngớ ngẩn nào trong mã, tôi đã không thử nhưng tôi hy vọng bạn sẽ có ý tưởng.
Có thể bạn sẽ muốn sử dụng "def self.random" để tránh các sự cố khi tên mô-đun của bạn thay đổi. Đây là thông lệ của Ruby. – molf