目标:建立一个存放电影名和影评的数据库,因此决定创建一个简单的代码库,用于在数据库中实现对象的持久化。
第一次尝试:编写一个代码库,把数据库中的每个表映射到一个类中,同时把每条记录映射到对象中,每当创建一个对象或访问它的属性时,这个对象就会产生一条SQL语句并发送给数据库。所有的这些功能都封装在一个类里面。
classs Entity attr_reader :table, :ident def initialize(table, ident) @table = table @ident = ident Database.sql "INSERT INTO #{@table} (id) VALUES (#{@ident})" end def set(col, val) Database.sql "UPDATE #{@table} SET #{col}='#{val}' WHERE id=#{@ident}" end def get(col) Database.sql ("SELECT #{col} FROM #{@table} WHERE id=#{@ident}") [0][0] end end
在数据库中,每个表都有一个id字段,每个Entity 会保存这个字段的内容以及它 的表名。创建一个Entity 对象后, 该对象会把自己保存在数据库中,Entity#set 方法会创建SQL语句更新字段的值, 而Entity#get 方法创建SQL语句读取字段的值。database使用数组的数组作为返回的数据集。
我们可以继承Entity类来映射一个指定的表。 例如, 用Movie类映射一个名为movies 的表:
class Movie < Entity def initialize(ident) super "movies", ident end def title get "title" end def title=(value) set "title", value end def director get "director" end def director=(value) set "director", value end end
Movie 类 的每个属性有两个方法: 一个像Movie#title这样的reader方法和一个像Movie#title=这样的writer方法。只要在Ruby命令行解释器里边输入命令就可以把一部电影加载到数据库里。
movie = Movie.new(1) movie.title = "SuperMan" movie.director = "Stabley Kubrick"
但是Ruby 中有一个非常强大的类库 Active Record 可以吧对象映射到数据表中,
那么用Active Record 写出来的Movie类是什么样子呢?
Movie类:
class Movie < ActiveRecord::Base end
OK 就这么简单 ,我们只是从Active Record ::Base继承了一个子类,它不用指定用那个表来映射Movie对象,也不用title和director这些看起来差不多的方法。程序会照样工作。
movie = Movie.create movie.title = "SuperMan" movie.title # => "SuperMan"
上面代码创建了一个Movie对象,该对象包装了movies表中的一条记录。然后通过Movie#title和Movie#title=方法访问title字段。这是如何实现的呢, 这和Active Record 的工作原理有关。
Active Record 通过内省机制查看类的名字。因为类名是Movie,Active Record 会自动把它映射到movies 的表中。(它知道如何转换英文单词的单复数。)
那么,像title和title=这样的方法(简称为访问器)又是怎样处理的呢? 这就是元编程的妙用了。Active Record 会自动定义这些方法。Active Record ::Base在运行时读取数据库的表模式,找到movies表有两个名为title和director 的字段,然后自动定义两个同名的属性和响应的访问器。也就是说,Active Record 在程序运行时动态的创建了Movie#title和Movie#director=这样的方法。
Ruby 不但可以在运行时访问语言构件,还能够修改他们。是不是很神奇呢?
相关推荐
这本书“Ruby元编程第二版”专注于讲解Ruby语言的这一独特特性,旨在帮助开发者更好地理解和利用Ruby的元编程能力。 元编程的基本概念是程序能够自省、修改自身或者在运行时生成新的代码。在Ruby中,元编程的强大之...
ruby元编程.pdf ruby 元编程 这本书对ruby的调用原理做了非常精辟的分析。 ruby 元编程 这本书对ruby的元编程方式做了比较好的阐释。 ruby 元编程 这本书对结对编程有一个很好的提现。
根据提供的文件信息,本文将对《Ruby元编程》这一主题进行深入探讨,解析其核心概念、应用场景以及为何元编程在Ruby语言中具有重要的地位。 ### 一、Ruby元编程简介 #### 1.1 元编程定义 元编程是指编写能够生成或...
ruby元编程 第2版 中文 目录清晰 方便广大通勤族路上看,如果喜欢请购买正版纸质图书
Ruby元编程中文版
Ruby元编程是编程的一种高级技巧,它允许程序员在运行时动态地修改或创建代码,极大地提高了灵活性和代码的可扩展性。Ruby作为一种动态类型语言,其元编程能力尤为强大,使得开发者可以创建出高度定制化的解决方案。...
#### 二、《Ruby元编程》书籍简介与评价 《Ruby元编程》是一本以案例驱动的方式介绍Ruby元编程技巧的书籍。书中不仅详细解析了Ruby语言的核心特性和元编程机制,还通过具体的例子展示了如何利用这些特性编写简洁、...
ruby 元编程 中文 《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题的方式,更详细开...
Ruby 一种面向对象程序设计的脚本语言 本书的第一部分“Ruby元编程”是本书的核心部分...本书的第二部分“Rails中的元编程”是一个元编程实例,Rail是Ruby标志性框架。 在阅读本书之前,需要了解本书的三个附录 A、B、C
《Programming Ruby中文版第二版》是一本专注于Ruby编程语言的权威指南,对于想要深入学习和理解Ruby编程的读者来说,是一本不可多得的资源。Ruby作为一种动态、面向对象的编程语言,以其简洁、优雅的语法和强大的元...
在Ruby这种动态编程语言中,元编程是一种核心技术,它不仅仅是一种技巧,更是Ruby和Rails框架中用于提高开发效率和软件复用性的关键方法。 在Ruby语言中,元编程主要通过方法拦截、动态方法定义、元类以及一些特殊...
Ruby元编程是编程领域中的一个高级技术,它允许程序员在运行时操纵语言的结构和行为。这本《Metaprogramming Ruby》书籍深入探讨了如何利用Ruby的特性进行元编程,帮助开发者提升代码的灵活性、可扩展性和复用性。源...
《Metaprogramming Ruby 2nd Edition》是一本深入探讨Ruby语言元编程特性的经典之作。本书不仅适合那些希望深入了解Ruby内部机制的读者,同时也为那些想要提升自己代码质量以及更有效地处理遗留代码的开发者提供了...
《Ruby元编程》以案例形式循序渐进地介绍了Ruby特有的实用编程技巧 元编程 通过分析案例 讲解例题 回顾Ruby代码库的实现细节 《Ruby元编程》作者Paolo Perrotta不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题...
本书是它的第2版,其中包括超过200页的新内容,以及对原有内容的修订,涵盖了Ruby 1.8中新的和改进的特性以及标准库模块。它不仅是您学习Ruby语言及其丰富特性的一本优秀教程,也可以作为日常编程时类和模块的参考...
Ruby 元编程 中文 高清扫描版, 完整中文版