不少测试同行都有接触过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元编程.pdf ruby 元编程 这本书对ruby的调用原理做了非常精辟的分析。 ruby 元编程 这本书对ruby的元编程方式做了比较好的阐释。 ruby 元编程 这本书对结对编程有一个很好的提现。
Ruby元编程pdf
《Ruby元编程》PDF版本下载
ruby 元编程 中文 《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开...
Ruby元编程中文版
ruby元编程 第2版 中文 目录清晰 方便广大通勤族路上看,如果喜欢请购买正版纸质图书
Ruby编程,Ruby编程,Ruby编程,Ruby编程,Ruby编程,
本书的第一部分“Ruby元编程”是本书的核心部分,他讲述了一个资深程序员在办公室一周发生的事情。 本书的第二部分“Rails中的元编程”是一个元编程实例,Rail是Ruby标志性框架。 在阅读本书之前,需要了解本书的三...
《Ruby元编程》以案例形式循序渐进地介绍了Ruby特有的实用编程技巧 元编程 通过分析案例 讲解例题 回顾Ruby代码库的实现细节 《Ruby元编程》作者Paolo Perrotta不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题...
Ruby元编程 书籍配套源代码 Metaprogramming Ruby source code
2. 动态性:Ruby是一门动态性极强的编程语言,允许开发人员在运行时通过元编程(metaprogramming)来修改和扩展代码的行为。这种动态性使得Ruby具有很大的灵活性,可以应对各种需求和场景。 3. 面向对象编程:Ruby...
Metaprogramming Ruby 2nd Edition ruby元编程
元编程:编写可以编写代码的代码,ruby和rails的技术核心
基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言基于Ruby编程语言
《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开列出发挥其优势的...
Ruby 元编程,不错的书,就是有点难懂
Ruby 元编程 中文 高清扫描版, 完整中文版
在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...