module_function
đặt các phương thức cá thể đã cho riêng tư, sau đó sao y và đặt chúng vào metaclass của mô-đun làm phương thức công khai. extend self
thêm tất cả các phương thức thể hiện vào singleton của mô-đun, khiến chúng không bị thay đổi.
module M
extend self
def a; end
private
def b; end
end
module N
def c; end
private
def d; end
module_function :c, :d
end
class O
include M
include N
end
M.a
M.b # NoMethodError: private method `b' called for M:Module
N.c
N.d
O.new.a
O.new.b # NoMethodError: private method `b' called for O
O.new.c # NoMethodError: private method `c' called for O
O.new.d # NoMethodError: private method `d' called for O
vâng phương pháp lớp module_function là công khai nhưng phương pháp dụ là tin – horseyguy
module_function "tạo ra các chức năng mô-đun cho các phương pháp đặt tên. Các chức năng này có thể được gọi với các module như một máy thu, và cũng có thể trở thành có sẵn như là phương pháp dụ đến các lớp học mà kết hợp trong mô-đun. Chức năng của mô-đun là bản sao của bản gốc, và do đó có thể được thay đổi độc lập. Các phiên bản phương pháp cá thể được tạo riêng. Nếu được sử dụng không có đối số, thì các phương thức được xác định sau sẽ trở thành các hàm mô-đun. " nguồn: http://www.ruby-doc.org/docs/ProgrammingRuby/html/ref_c_module.html#Module.module_function – mysmallidea