当前位置: 首页 > news >正文

Ruby 之方法委托

ruby 方法委托的优点在于,可以将多个不同实例(或类)的方法组织在一起,然后进行统一调用,方便各类方法的统一管理。比如下边示例中的 color 和 username,本来是不同类里边的方法,但最后都可以统一使用 Man 的实例进行调用。

实例方法委托

require 'forwardable'class Personattr_accessor :name, :sex # attr_accessor相当于attr_reader和attr_writer的合集,实际上是在定义类成员变量的时候就给他定义了一个get和set方法。def initialize(name, sex)@name, @sex = name, sexenddef username@nameend
endclass Colorattr_accessor :colordef initialize(color)@color = colorend
endclass Manextend Forwardabledef_delegators :@person, :username, :sex # 将 username 和 sex 方法委托给 @person,在 Man 实例上调用 username 方法相当于调用 @person 的 username 方法def_delegators :@color, :color # 将 color 方法委托给 @color,在 Man 实例上调用 color 方法相当于调用 @color 的 color 方法def initialize()@person = Person.new("Looking", "male")@color = Color.new("white")end
endman = Man.new
puts man.username # Looking
puts man.sex # male
puts man.color # white

类方法委托

require 'forwardable'class Persondef initialize()enddef self.nicknameself.name + " nickname"end
endclass Manextend SingleForwardabledef_delegators :Person, :nickname # 将 nickname 类方法委托给 Person,在 Man 类中直接调用 nickname 类方法相当于调用 Person 的 nickname 方法def initialize()end
endputs Man.nickname # Person nickname

http://www.lryc.cn/news/215000.html

相关文章:

  • [论文笔记]RetroMAE
  • 服务熔断保护实践--Sentinal
  • 页面淘汰算法模拟实现与比较
  • FPGA实现HDMI转LVDS视频输出,纯verilog代码驱动,提供4套工程源码和技术支持
  • JAVA-easyexcel多sheet页导入
  • Java——比较器(一文搞懂比较器Comparable和Comparator)
  • 企业直播招聘抖音报白如何实现?怎么样才能报白成功?
  • 【考研数学】概率论与数理统计 —— 第七章 | 参数估计(2,参数估计量的评价、正态总体的区间估计)
  • 【设计模式】第10节:结构型模式之“组合模式”
  • 改进YOLOv3!IA-YOLO:恶劣天气下的目标检测
  • Vue路由跳转的几种方式
  • TiDB x 汉口银行丨分布式数据库应用实践
  • uci机器学习数据库简介
  • 多人协作使用git如何解决冲突?
  • 基于【逻辑回归】的评分卡模型金融借贷风控项目实战
  • 企业拉美跨境出海面对时延情况怎么办?
  • 【vector题解】只出现一次的数字 | 电话号码的数字组合
  • VS2022 开发方式
  • 【Python语言速回顾】——数据可视化基础
  • java实现pdf文件添加水印,下载到浏览器
  • 代码随想录算法训练营第四十一天丨 动态规划part04
  • PyCharm免费安装和新手使用教程
  • 使用Python的Scikit-Learn进行决策树建模和可视化:以隐形眼镜数据集为例
  • 开源软件:释放创新的力量,改变数字世界的游戏规则
  • 【QT】鼠标常用事件
  • LuatOS-SOC接口文档(air780E)--mlx90640 - 红外测温(MLX90640)
  • java连接本地数据库可以简写为///
  • 基于springboot漫画动漫网站
  • autoFac 生命周期 试验
  • foreach、for in 和for of的区别?