Ruby8 继承(Inheritance)和模块(Modules)

admin 2018年5月13日05:00:41评论479 views字数 1670阅读5分34秒阅读模式
摘要

super关键字
调用父类的同名方法
self關鍵字
指向當前作用域實例作用


继承示例

# inheritance  class User   attr_accessor :name, :age    def initialize name, age     @name, @age = name, age   end    def panels     # ||= 操作符, 如果变量不存在 那么就赋值     @panels ||= ['Profile', 'Products']   end end  class Admin < User    def panels     @panels ||= ['Profile', 'Products', 'Manage Users', 'System Setup']   end  end  user = User.new('user_1', 18) p user.panels  puts '-' * 30 admin = Admin.new('admin_1', 28) puts admin.name p admin.panels  # 查看这个类的父类 p Admin.superclass

常用關鍵字

super关键字
调用父类的同名方法
self關鍵字
指向當前作用域實例

# inheritance  class User   attr_accessor :name, :age    def initialize name, age     @name, @age = name, age   end    def panels     # ||= 操作符, 如果变量不存在 那么就赋值     @panels ||= ['Profile', 'Products']   end    def to_s     # self指向當前作用域實例     "#{self.name} os #{self.age}"   end    # 定义方法的self代表类函数 (静态函数)   def self.category     'User'   end    # 一次性定义多个类方法   class << self     def category_2       'User'     end   end end   # < 符號代表繼承 class Admin < User    def panels     super #super 調用父類相同名稱的函數 (也可以帶參數)     @panels.concat ['Manage Users', 'System Setup']   end  end   user = User.new('user_1', 18) p user.panels  puts '-' * 30 admin = Admin.new('admin_1', 28) puts admin.name p admin.panels   # 查看这个类的父类 p Admin.superclass

Modules 模块

作用

  1. namespace
  2. mixin: 实现类似于多类继承的功能
  3. storage

module关键字

  1. module: 声明一个module
  2. include: 把一个module的方法注入为实例放啊
  3. extend: 把一个module的方法注入为类方法
class User   attr_accessor :name, :age    def initialize name, age     @name, @age = name, age   end    def panels     @panels ||= ['Profule', 'Products']   end  end   module Management   def company_notifies     'company_notifies'   end end  module CompanyFeature   def new_record     'new_record'   end end  class Admin < User   include Management   extend CompanyFeature    def panels     super     @panels << ['Manage Users', 'System Setup']   end end  class Staff < User   include Management   extend CompanyFeature    def panels     super     @panels << ['Tasks']   end end  p Admin.new_record p Staff.new_record   puts '-' * 30 admin = Admin.new 'admin_1', 18 puts admin.company_notifies  puts '-' * 30 staff = Staff.new 'staff_1', 21 puts staff.company_notifies

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2018年5月13日05:00:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Ruby8 继承(Inheritance)和模块(Modules)http://cn-sec.com/archives/51542.html

发表评论

匿名网友 填写信息