`
piecehealth
  • 浏览: 47593 次
  • 性别: 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 CGI 编程

    Ruby CGI 编程 Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的。 使用Ruby您不仅可以编写自己的SMTP服务器,FTP程序,或Ruby Web服务器,而且还可以使用...

    Fred Wu:如何通过努力和一些小聪明,成为一个更优秀的Ruby程序员

    - 要深入了解Ruby的语法结构、面向对象编程特性以及元编程能力等核心概念。这些是编写高效、可维护代码的基础。 - 熟悉Ruby生态系统中的常用工具和库,比如Rails框架等,可以提高开发效率。 3. **培养良好的编码...

    计算的本质:深入剖析程序和计算机

    本书中的代码全部使用 Ruby 写成。Ruby 是一种简单、友好而且有趣的编程语言。因为 Ruby 清晰与灵活,我选择...如果你想学习更多内 容,推荐从 O’Reilly 的《Ruby 编程语言》(The Ruby Programming Language)一书起步

    Ruby 简介

    Ruby是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。 您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro Matsumoto...

    如何零基础学好编程

    Basic起步 C/C++ 脚本语言转型:Ruby, PHP, Python...

    新手起步:perl入门

    ### 新手起步:Perl入门——全面解析Perl编程基础 #### 一、《Perl语言入门》:小骆驼书引领新手入门 《Perl语言入门》作为O'Reilly出版社的经典之作,被广泛誉为“小骆驼书”,是Perl编程语言学习者的首选教材。...

    在Ruby on Rails中使用AJAX的教程

    如果没有听说过 Rails,那么欢迎您外星旅行归来,近几年大概只有那个地方没有听说过 Ruby on Rails 了。Rails 最吸引人的地方是能够很快地建立功能完备的应用程序并运行起来。Rails 为 Ajax 而内置集成的 Prototype....

    first_app:Ruby on Rails 教程的第一个应用程序

    1. **Rails框架**:Ruby on Rails是一个基于Ruby编程语言的开源Web开发框架,它遵循DRY(Don't Repeat Yourself)和Convention Over Configuration的原则,提供了一套高效的开发工具和约定,简化了Web应用的构建过程...

    JAVA面向对象基础

    1. **早期编程挑战**:1950年代,当编程还处于起步阶段,程序员们直接使用十六进制机器码进行编程,这一时期计算机性能低,软件规模小,因此这种方法尚可应对。 2. **结构化程序设计的兴起**:到了1960年代,随着...

    PHEI Broadview 2007专业书目 第一期2

    - “起步”部分为Rails新手提供了入门指南,“附录”部分简要介绍了Ruby的基本语法。 - **价值与意义**: - 荣获2006年Jolt大奖“最佳技术类图书”奖项。 - 通过实际案例讲解,帮助读者快速上手Ruby on Rails...

    用英文写一篇短文介绍计算机语言的发展历史和特点,要求简单介绍机器语言、汇编语言、高级语言的简单发展历程和各自的特点。

    在20世纪40年代,计算机刚刚起步,那时的计算机只能理解和执行由二进制代码(0和1)组成的指令,这就是机器语言。这些指令直接对应于硬件的操作,每一串二进制码都代表着特定的计算或控制操作。虽然机器语言极其底层...

    MENTORS

    标签“Ruby”表明这个项目主要使用Ruby编程语言,这是一种面向对象的、动态类型的、简洁明了的语言,特别适合Web开发,因其语法简洁和生产力高而受到开发者喜爱。Ruby的灵活性使得Rails框架能够实现快速开发和可读性...

    fullStackProj:即将克隆flickr!

    1. **Ruby基础知识**:了解变量、数据类型、控制流、函数、类和模块等基本概念,这是编写任何Ruby程序的基础。 2. **Ruby on Rails框架**:学习路由、控制器、模型、视图、数据库交互(ActiveRecord)、测试(Rspec...

    2009年程序员杂志第十二期

    9. **编程语言新趋势**:Python、Ruby等语言的兴起,可能会引发关于编程语言选择和学习路径的讨论。 10. **职业生涯规划**:对于程序员的职业发展,如何提升技能,如何在职场中保持竞争力,以及如何平衡工作与生活...

    omakase:您的 Web 应用程序项目的新起点

    1. **Ruby**:Ruby 是一种面向对象的、动态类型的编程语言,由 Yukihiro Matsumoto(松本行弘)在1990年代末创造。它的设计哲学强调简单、易读和生产力,使得开发者可以更专注于解决问题而不是语言本身。 2. **Web ...

    SpringBoot项目博客系统-包含前台后台前端后端-适合作为Java学习的第一练手项目.zip

    1. **Spring Boot基础知识**:理解Spring Boot的核心特性,如自动配置、起步依赖、内嵌Web服务器(如Tomcat)等。学习如何创建Spring Boot项目,配置启动类,并使用@SpringBootApplication注解。 2. **MVC架构**:...

    开源2008年第十一期

    5. **开源编程语言**:2008年,Python、Perl、Ruby等开源编程语言日益流行,特别是Python,因其易学性和强大的库支持,成为科学计算和Web开发的首选语言。 6. **开源软件与企业策略**:随着开源软件的普及,越来越...

    grails和groovy的电子书-4

    #### Grails的安装和起步 安装Grails的步骤包括: 1. 访问Grails官方网站下载最新版本或夜间构建版。 2. 解压缩下载的文件。 3. 设置GRAILS_HOME环境变量。 4. 将GRAILS_HOME/bin目录添加到系统的PATH环境变量中。 ...

    crodoc:受YARD启发的强大的Crystal文档生成器。 现在只是一个想法,不要抱太大希望

    1. **增强的标记语言**:可能引入类似YARD的标记语言,允许开发者在代码中添加更复杂的文档结构和元数据。 2. **插件系统**:借鉴YARD的插件机制,使`crodoc`能够适应各种特定的编程风格和框架。 3. **自定义输出...

Global site tag (gtag.js) - Google Analytics