码迷,mamicode.com
首页 > 其他好文 > 详细

第一个ruby程序

时间:2016-12-17 14:23:32      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:哈希   关注   解释   脚本   代码   res   scala   数据库   oar   

老实说不是很喜欢去讨论ruby和python的对比,似乎总是把两个语言放在对立的位置上,我觉得没有必要,同样是动态语言,同样是解释型脚本语言,很多特性都是互相影响的,语言本身也在不断进化,我们更应该关注的是编程思想而不是语言本身。

说了一点题外话,之所以要求学ruby,主要就是因为有一本好书想读,就是Paolo Perrotta的《Ruby元编程》,书看了一天,ruby语法学了半天,用irb捣鼓了一晚上,应该说跟python,scala都有很多相近的地方,因为没有接触Lisp,Haskell之类的函数编程语言,因此不好说跟他们怎么样,但是学了python再去学ruby是觉得非常轻松地。

书中星期二中有个问题挑战,就是对DS和Computer类中的函数进行动态生成,好吧,我又犯老毛病了,书看一半,自己先干,在看到define_method方法后用我自己的思路捣鼓了一个解决方案,还没看书中的实例,先把代码弄出来看看,以下就是我的第一个ruby程序:

# 数据源定义,原应为关联数据库,这里只是进行模拟
class DS
  parts = cpu, mouse, keyboard  # 临时数组用于批量生成方法
  parts.each do |part|
    define_method "get_#{part}_info".to_sym do |id| # 生成三种设备的信息函数
      "This is #{part} #{id}."
    end
    define_method "get_#{part}_price".to_sym do |id|  # 生成三种设备的价格函数
      parts.zip([150, 50, 40]).to_h[part] # 通过zip合并数组转换为哈希结构再索引
    end
  end
end
# 电脑配件定义
class Computer
  def initialize(computer_id, data_source)  # 初始化id和数据源
    @id = computer_id
    @data_source = data_source
  end
  parts = cpu, mouse, keyboard
  parts.each do |part|
    define_method part.to_sym do
      info = @data_source.send("get_#{part}_info".to_sym, @id)
      price = @data_source.send("get_#{part}_price".to_sym, @id)
      result = "#{info} ($#{price})"
      return " * #{result}" if price >= 100 # 判断价格是否高于100,加星号显示
      result
    end
  end
end
puts "DS methods: #{DS.instance_methods(false)}"
puts "Computer methods: #{Computer.instance_methods(false)}"

ds = DS.new
computer = Computer.new(10, ds)
puts computer.cpu
puts computer.mouse
puts computer.keyboard

 

第一个ruby程序

标签:哈希   关注   解释   脚本   代码   res   scala   数据库   oar   

原文地址:http://www.cnblogs.com/lancky/p/6189519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!