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

Ruby元编程起步3

阅读更多
创建类方法

上回我们动态创建了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元编程第二版,中文影印版,便于英文不好的同学们学习

    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