• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ruby模拟多个构造器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在ruby中没有像c++或者ruby中的构造器,可是我们依然能够创建出类似的多个构造器:

 
class ColoredRectangle
  def initialize(r, g, b, s1, s2)
     @r, @g, @b, @s1, @s2 = r, g, b, s1, s2
  end
  def ColoredRectangle.white_rect(s1, s2)
     new(0xff, 0xff, 0xff, s1, s2)
  end
  def ColoredRectangle.gray_rect(s1, s2)
     new(0x88, 0x88, 0x88, s1, s2)
  end
  def ColoredRectangle.colored_square(r, g, b, s)
     new(r, g, b, s, s)
  end
  def ColoredRectangle.red_square(s)
     new(0xff, 0, 0, s, s)
  end
  def inspect
     "#@r #@g #@b #@s1 #@s2"
  end
end
a = ColoredRectangle.new(0x88, 0xaa, 0xff, 20, 30)
b = ColoredRectangle.white_rect(15,25)
c = ColoredRectangle.red_square(40)

如果属性过多,我们可以使用

 
class PersonalComputer   
  attr_accessor :manufacturer,   
                :model, :processor, :clock,   
                :ram, :disk, :monitor,   
                :colors, :vres, :hres, :net  
  
  def initialize(&block)   
    instance_eval &block   
  end  
  
  # Other methods   
end  
  
desktop = PersonalComputer.new do  
  self.manufacturer = "Acme"  
  self.model = "THX-1138"  
  self.processor = "986"  
  self.clock = 9.6        # GHz   
  self.ram = 16           # Gb   
  self.disk = 20          # Tb   
  self.monitor = 25       # inches   
  self.colors = 16777216   
  self.vres = 1280   
  self.hres = 1600   
  self.net = "T3"  
end  
  
p desktop  

怎么样,这样是不是漂亮很多呢?!

注意:block中的self是必须的。

你也可以使用undef方法动态删除你的需要的方法。

 
desktop = PersonalComputer.new do  
  self.manufacturer = "Acme"  
  self.model = "THX-1138"  
  undef model   
end  
p desktop.model #报错  

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ruby--1发布时间:2022-07-13
下一篇:
Ruby数据类型发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap