第六章 模块和程序组织
创建和使用模块的基础知识
module MyFirstModule
def say_hello
puts "hello"
end
end
混含操作由include语句实现
class ModuleTester
include MyFirstModule
end
mt = ModuleTester.new
mt.say_hello
从类继承与混含模块的主要差别:可以混含多个模块。但任何类都不能从多个累继承。
模块不能有实例,要创建一个实例对象,就需要一个类。s = Stacklike.new是错误的。
include一个模块,和require、load一个文件的区别
require "requiree.rb"
require "requiree.rb"
第2次执行什么都不会发生
load "requiree.rb"
load "requiree.rb"
Ruby会2次读入该文件,在同一个文件的一行中两次加载一个文件是无意义的,但更多时候这种多次加载是有用的。相对于require,Rails更倾向于使用load,这意味着在浏览器中是运行应用程序的同时修改代码,这些修改会被重新加载,覆盖web服务器部分的缓存行为。如果应用程序已经加载了一次文件,在同样的地方多次调用require不会有这样的效果。
如果在对象的方法查找路径上有多个同名的方法,第一个碰到的方法被选中执行
module M
def report
puts "'report' method in module M"
end
end
class C
include M
def report
puts "'report' method in class C"
end
end
c = C.new
c.report
输入如下:
'report' method in class C.
查找路径上有2个report方法,但是该查找在遇到模块M中的方法前,先遇到了类C,因此被执行的report方法是定义在C中的那一个
module M
def report
puts "'report' method in module M"
end
end
module N
def report
puts "'report ' method in module N"
end
end
class C
include M
include N
end
c = C.new
c.report
输出:模块N中的report方法。查找路径上的第一个report方法是最近混含进来的模块中的那一个。
可以在一个方法定义体的内部,获取并执行在方法查找路径上下一个匹配该方法名的方法,可以使用super关键字。
module M
def report
puts "'report' method in module M"
end
end
class C
include M
def report
puts "'report' method in class C"
super
puts "Back from the 'super' call."
end
end
c = C.new
c.report
输出
'report' method in class C
'report' method in module M
Back from the 'super' call.
super处理参数的方式是这样的:
以裸词方式(super)调用,自动向前传递调用super的方法所获得的参数
用空参数表(super())调用,不给上一级方法传递任何参数,即使是当前方法的参数也不传递
用特定的参数(如super(a,b,c))调用,传递这些指定的参数。
决定类还是模块的时候
实体或事物最好建模为类,而实体或事物的特征最好建模为模块。倾向于使用名词作为类名,使用形容词作为模块名
嵌套的模块和类
在模块中定义一个类:
module Tools
class Hammer
要产生定义在Tools模块中的Hammer类的实例,必须用双冒号常量查找法(::)
h = Tools::Hammer.new
分享到:
相关推荐
《Ruby for Rails中文版》是美国作者David Black所著的一本专为Rails开发者介绍Ruby语言的书籍,旨在帮助读者深入理解Ruby的基础与Rails框架的内在联系。Ruby是一种面向对象的、动态类型的编程语言,它的简洁语法和...
根据给定的文件信息,以下是本书《Ruby for Rails中文版,完整扫描版》的相关知识点概述: 1. 针对Ruby初学者:本书作为入门教材,旨在帮助初学者掌握Ruby语言基础。这对于已经熟悉其他编程语言但尚未接触过Ruby的...
《Ruby for Rails中文版》是一本深入探讨Ruby on Rails框架的书籍,它的源代码提供了丰富的实践示例,帮助读者更好地理解和应用Rails开发技巧。在这个压缩包中,包含了多个与Rails编程相关的文件,如`r4rmusic-1`、`...
### Ruby for Rails 知识点概述 #### 一、书籍背景与重要性 - **书籍定位**:《Ruby for Rails》被广泛认为是学习Ruby语言的必读之作,特别是对于那些希望利用Ruby on Rails(RoR)进行高效Web开发的学习者而言。...
Ruby三神书之一(其余的两本是Agile.Web.Development.with.Rails和Rails Recipes,在我的资源列表也有) “本书作者曾经教过我很多Ruby知识……每一个从其他语言转到Rais的人都应该拥用本书。为了充分发挥Rails的...
Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称,被广泛应用于Web开发,尤其是与Ruby on Rails框架结合使用。"Ruby新手学习书"和"Rails_4_days"这两个资源是为初学者设计的,旨在帮助他们快速掌握Ruby语言...
《Ruby基础教程(中文第四版)》是深入学习Ruby语言的重要参考资料,由Ruby之父亲自审校并作序推荐,其权威性和准确性不言而喻。 该书涵盖了Ruby的基础知识,包括但不限于以下内容: 1. **变量和常量**:Ruby中的...
总之,无论你是对编程感兴趣的新手,还是想扩展技能树的开发者,这份“Ruby入门教程中文PDF 附实例”都将是你宝贵的参考资料。通过学习,你不仅可以掌握Ruby的基础知识,还能体验到编程的乐趣和效率。
本书《敏捷Web开发之Rails应用详解》第三版主要介绍了如何使用Ruby on Rails框架来进行敏捷Web开发。Rails是一个用Ruby语言编写的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,并且强调代码的简洁...
本资源"For-Rails-Beginners"显然是为那些希望入门Ruby on Rails的初学者设计的,特别是对于台湾地区和使用传统中文的用户。 在Rails框架中,以下是一些核心概念和知识点: 1. **Ruby语言基础**:在学习Rails之前...
这份电子版手册详细介绍了Ruby的核心概念、语法以及常见问题的解决方案,旨在帮助开发者快速掌握并熟练运用Ruby。 在Ruby的世界里,了解基本语法是入门的第一步。这包括变量(局部变量、实例变量、类变量和全局变量...
这个"Ruby语言入门教程(中文版)[PDF]"涵盖了Ruby的基础到进阶内容,适合初学者和希望巩固Ruby知识的开发者。通过阅读并实践教程中的例子,读者可以逐步掌握Ruby编程,并开启在Ruby世界中的探索之旅。
2. **控制结构**:Ruby中的流程控制有if/else、case、while/until循环、for循环以及块(Proc和Lambda)的使用,这些都是编写逻辑代码的关键部分。 3. **面向对象**:Ruby是面向对象的,每个值都是一个对象。它支持...
本教程的中文版将引导你逐步了解并掌握这些知识点,无论你是编程新手还是寻求新挑战的开发者,都能从中受益。通过阅读和实践,你将能够编写出优雅、高效的Ruby代码,并进一步探索这个充满魅力的编程世界。
《笨方法学Ruby》是针对初学者的一本中文教程,旨在通过实践性的学习方式帮助读者掌握Ruby编程语言。这本书的特点是强调动手实践,通过一系列的练习来深化对Ruby语法和编程概念的理解。以下是对该书内容及压缩包文件...
Ruby是一种面向对象的、动态...通过这个中文教程,你将掌握其基本语法,理解面向对象编程的概念,熟悉常用的类库和工具,并能够运用Ruby进行实际的项目开发。无论你是初学者还是有经验的开发者,都能从这个教程中受益。
Web开发敏捷之道 应用Rails进行敏捷Web开发第4版 原版书及代码 (rails3.2版) 原书名为:Agile Web Development with ...里面包含了第三版的中文版,和第四版 部分内容相似,可提供参考, enjoy rails, good luck ;)
在"ruby.rar"这个压缩包中,包含了三本中文教程,可以帮助初学者和经验丰富的开发者深入理解Ruby语言的核心概念和高级特性。 首先,让我们探讨一下Ruby的基础知识。Ruby由日本人松本行弘(Yukihiro Matsumoto)于1995...
- 控制结构:Ruby中的条件语句有if/else、unless、case,循环有while、until、for以及块(block)和循环控制关键字如break和next。 - 函数与方法:Ruby中的函数定义使用def关键字,方法可以接收可变数量的参数,...