08 - automatically initializing mixed-in modules.rb
来自「O Reilly Ruby Cookbook source code」· RB 代码 · 共 55 行
RB
55 行
class Class def included_modules @included_modules ||= [] end alias_method :old_new, :new def new(*args, &block) obj = old_new(*args, &block) self.included_modules.each do |mod| mod.initialize if mod.respond_to?(:initialize) end obj endend#---module Initializable def self.included(mod) mod.extend ClassMethods end module ClassMethods def included(mod) if mod.class != Module #in case Initializeable is mixed-into a class puts "Adding #{self} to #{mod}'s included_modules" if $DEBUG mod.included_modules << self end end endend#---module A include Initializable def self.initialize puts "A's initialized." endendmodule B include Initializable def self.initialize puts "B's initialized." endend#---class BothAAndB include A include Bendboth = BothAAndB.new# A's initialized.# B's initialized.#---
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?