`
piecehealth
  • 浏览: 46578 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby元编程起步1

阅读更多
不少测试同行都有接触过Ruby,但是如果没有接触过Ruby的元编程是一种比较遗憾的事情。今天与大家分享一个简单的小例子,希望对大家有帮助。

这个例子是如何把一个csv文件映射成一个类,文件中的记录映射成这个类的实例。
Friends.csv
name,gender,age,dept
Li Lei,M,23,edw
Han Mei-mei,F,22,b2b
Jim Green,M,23,TRH

我们可以为以上文件创建一个类,然后name, gender, age, dept都是这个类的属性(Attribute)。如果我们想找叫Li Lei的员工,我们可以这样写
Lilei = Friends.find_by_name(‘Li Lei’)
得到Li Lei的部门
Lilei_dept = lilei.dept

传统思路我们会这样实现:
class Friends
  attr_reader :name, :gender, :age, :dept
  
  # 类变量@@data用来存储所有记录
  @@data = []
  
  def initialize name, gender, age, dept
    @name, @gender, @age, @dept = name, gender, age, dept
  end
  
  def self.find_by_name name
    @@data.select {|data| data.name == name}[0]
  end
  
  # 填充@@data
  File.open('Friends.csv') do |file|
    file.readline  # Skip fist row
    file.each_line do |line| 
      @@data << self.new(*line.chomp.split(','))
    end
  end

end

lilei = Friends.find_by_name('Li Lei')
lilei_dept = lilei.dept

但是这样弱爆了……如果有一万个csv文件你要写一万个几乎差不多的类,谁都不想重复发明那么多轮子。但是如果你学会了元编程,就可以非常优雅的解决这个问题。

1. 动态创建类
元编程就是用程序写程序,具体到我们这里,我们要让程序来写出我们所期望的类。首先要想的问题是我们要给程序的输入(5秒钟思考时间)……我们所需要的信息有csv文件的名字,csv文件的结构(attributes),以及内容,但是前者可以决定后两者,所以我们紧紧需要文件名即可。

有了文件名了,如何才能让程序把类建出来?

据我所知有两种方法:

第一种:Object.const_set(class_name, Class.new)
不用查帮助文档我们也能看出来,这个方法是给常量赋值的,但是又怎么能创建类呢?
答案很简单,Ruby中,类是一个常量!今天不花篇幅解释了,知道就行。

第二种:Friends = Class.new
这种方法一般接触过Ruby的同学都好理解,Ruby里所有东西都是对象,连类本身都是对象,具体的类是类这个类的实例……如果你看不懂这段绕口令的话,就看上面哪行代码吧。Ruby的世界很简单,所有东西都是对象(半静态语言介绍OO的时候不要说这句话了),对象就是能被它所属的类给new出来!
还有一点就是,正如刚才所说,因为类又是常量,所以首字母要大写。

OK,终于可以动手了,赶紧完成这个起步的起步:
module Tool

  def self.csv2class csv_name 
    klass_name = csv_name.gsub('.csv', '').gsub(/\s+/, '_').downcase.capitalize
    Object.const_set(klass_name, Class.new)
  end

end
分享到:
评论

相关推荐

    Ruby元编程第二版中文

    Ruby元编程第二版,中文影印版,便于英文不好的同学们学习

    ruby元编程.pdf

    ruby元编程.pdf ruby 元编程 这本书对ruby的调用原理做了非常精辟的分析。 ruby 元编程 这本书对ruby的元编程方式做了比较好的阐释。 ruby 元编程 这本书对结对编程有一个很好的提现。

    Ruby元编程pdf

    Ruby元编程pdf

    《Ruby元编程》PDF版本下载.txt

    《Ruby元编程》PDF版本下载

    Ruby元编程-中文

    ruby 元编程 中文 《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开...

    Ruby元编程中文版

    Ruby元编程中文版

    Ruby元编程 第2版 中文 佩罗塔著 2015.08

    ruby元编程 第2版 中文 目录清晰 方便广大通勤族路上看,如果喜欢请购买正版纸质图书

    Ruby编程,Ruby编程,

    Ruby编程,Ruby编程,Ruby编程,Ruby编程,Ruby编程,

    Ruby 元编程

    本书的第一部分“Ruby元编程”是本书的核心部分,他讲述了一个资深程序员在办公室一周发生的事情。 本书的第二部分“Rails中的元编程”是一个元编程实例,Rail是Ruby标志性框架。 在阅读本书之前,需要了解本书的三...

    ruby元编程

    《Ruby元编程》以案例形式循序渐进地介绍了Ruby特有的实用编程技巧 元编程 通过分析案例 讲解例题 回顾Ruby代码库的实现细节 《Ruby元编程》作者Paolo Perrotta不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    Ruby元编程 书籍配套源代码 Metaprogramming Ruby source code

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    2. 动态性:Ruby是一门动态性极强的编程语言,允许开发人员在运行时通过元编程(metaprogramming)来修改和扩展代码的行为。这种动态性使得Ruby具有很大的灵活性,可以应对各种需求和场景。 3. 面向对象编程:Ruby...

    Metaprogramming Ruby 2nd Edition ruby元编程

    Metaprogramming Ruby 2nd Edition ruby元编程

    元编程 Ruby

    元编程:编写可以编写代码的代码,ruby和rails的技术核心

    基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言.zip

    基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言

    Ruby元编程【英文版】

    《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开列出发挥其优势的...

    Ruby 元编程.pdf

    Ruby 元编程,不错的书,就是有点难懂

    Ruby 元编程 中文 高清扫描版

    Ruby 元编程 中文 高清扫描版, 完整中文版

    Ruby编程语言pdf

    在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...

Global site tag (gtag.js) - Google Analytics