创建类方法
上回我们动态创建了initialize方法,其他实例方法跟initialize如出一辙,就不介绍了,今天我们要面临的是如何创建类方法。
不过为了剧情需要,先把我们刚刚建好initialize的类给填满。
按照第一节的例子,我们来吧数据都填充到类变量@@data中去,不过为了巩固上节的知识,请先自己试着写这段代码。
module Tool
def self.csv2class csv_name
klass_name = csv_name.gsub('.csv', '').gsub(/\s+/, '_').downcase.capitalize
klass = Object.const_set(klass_name, Class.new)
File.open(csv_name ) do |file|
attributes = file.readline.chomp.split(',')
klass.class_eval do
attr_accessor *attributes
define_method :initialize do |*args|
attributes.each_with_index do |attribute, i|
instance_variable_set("@#{attribute}", args[i])
end
end
class_variable_set("@@data", [])
file.each_line do |line|
class_variable_get("@@data") << self.new(*line.chomp.split(','))
end
end
end
end
end
Tool.csv2class "Friends.csv"
puts Friends.new('Lilei','M',26,'Worker').dept
好吧,虽然我知道你们根本就没有自己动手,但是……anyway,我们继续……
跑题跑了大半篇,快忘记我们要实现类方法了,在这个例子中就是find_by_name这个方法。
传统方式,我们会用def self.find_by_name来定义这个方法,但是正如前篇所说,def这个方法进入不了美丽新世界——扁平作用域,所以我们就不得不用define_method。但是问题是define_method怎么用来定义类方法?
这里我们要重新审视一下类方法(以下均是个人理解,如有雷同,很有可能)。就如第一篇讲到的,类也是一个对象(对象即实例,还记得那段绕口令么?),那么所谓的类方法是不是就是类这个对象的实例方法?(又绕口令了)
class Class
def instance_method_for_demo
puts "This is a instance method for #{self}"
end
end
A = Class.new
A.instance_method_for_demo
class A
def self.class_method_for_demo
puts "This is a class method for #{self}"
end
end
A.class_method_for_demo
绕口令配上这段代码,不知道各位能不能理解: 所谓类方法,是类这个对象的实例方法……写到这我终于明白自己表达能力的欠缺,只能寄希望与各位读者的聪慧,如果懂了,我们就继续下一篇……
分享到:
相关推荐
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平台上...