- 浏览: 458593 次
- 性别:
- 来自: Runner
文章分类
- 全部博客 (97)
- commons (3)
- EJB3 (5)
- liferay (1)
- 设计模式 (1)
- JBoss (1)
- 常用 (6)
- guice (4)
- JAX-WS (1)
- 持久层处理 (3)
- 单元测试 (3)
- jmesa (6)
- mongodb (3)
- View显示 (6)
- lucene (1)
- struts2 (2)
- spring security (2)
- spring (4)
- hibernate (1)
- mysql (1)
- ruby (21)
- python (2)
- ubuntu (1)
- ibatis (2)
- javascript (3)
- 数据库 (1)
- swing (1)
- java基础 (2)
- dojo (1)
- android (9)
最新评论
-
BigHanson:
写得非常棒,醍醐灌顶 可以转发吗
spring security验证流程 -
背后的光:
spring security验证流程 -
hanlongjie:
commons-lang(time应用) -
litianpeng:
虽然是2009年写的帖子 不过还是要请问一下先生 我按照你的 ...
Ajax Fancy Capcha -
蔡小鱼:
ibatis总结
模块的定义跟类非常相似,只是用module关键字取代class关键字而已。不过与类不同,模块不能被实例化,也不能被子类化。模块是独立的,在继承体系中没有任何所谓的“模块等级”。
模块对象是Module类的一个实例,所有的类都是模块,不过并非所有的模块都是类。
模块有些面向过程的感觉,有时候只需要一些方法,并不想定义类时,就可以使用模块。这时的模块主要起命名空间的作用。
其中self可以用当前的模块名替换。方法引用方式与类也是一样的
Base64.encode(text),常量也是用“模块名::常量名”的方式引用。
模块还有一种作用叫混入(mixin),如果一个模块定义了实例方法而非类方法,这些实例方法可以混入其它类中。Enumerable与Comparable是两个著名的混入模块。Enumberable模块定义了若干有用的迭代器,它们都基于each迭代器。Enumerable模块自身并没有定义each迭代器,但是如果混入Enumerable模块的类定义了迭代器,它就立刻具有这些强大的迭代器。Comparable也与此类似,它定义了一组比较操作符,后者都是基于通用比较符<=>的,如果你的类定义了<=>,那么混入Comparable模块后,它就能自动拥有<、<=、==、>、>=和between?这些操作符和方法。
想把一个模块混入一个类中, 我们必须使用include。include通常像一个关键字一样被使用:
实际上,include是Module类的一个私有实例方法,它隐式地被self调用---在这里就是包含模块的类。如果使用方法的形式,上面的代码变为:
include是私有方法,它必须以函数形式被调用,而不能写成self.include(Comparable)。include方法可以接受任意多的Module对象进行混入,因此一个定义了each和<=>的类可以加入下面的代码:
包含一个模块会影响is_a?这个类型检查方法及条件比较符===,在ruby1.8中,String混入了Comparable模块和Enumerable模块:
注意instance_of?只对比接收者的类,而不管其超类或模块,所以下面的代码返回false:
尽管每个类都是模块,但是include方法不允许把一类包含在另外一个类中,它的参数必须是用module进行声明的模块,而不能是类。
混入一个模块的普通方式是使用Module.include方法,另外一种方法则是使用Object.extend方法,这个方法使指定模块的实例方法成为接收对象的单键方法。(如果接收者对象是一个Class实例,那么这些方法就成为那个类的类方法)。如:
感觉上面这段代码意思说得不是很明确,其实主要区别在网上看来的:
有点不同的是,如果实例extend了模块,那么里面的方法就是实例方法:
也就是说extend的即可以作实例方法,也可以作类方法,而include的只能是作实例方法。这也需要注意另一问题,上述情况的基准是module里面的都是实例方法。如果module里面出现了类方法,那么不应该用include或extends来使用,而应该直接用ModuleName.classMethod的方式来引用。大概解释与java差不多,类方法(静态方法)不被继承使用。
模块对象是Module类的一个实例,所有的类都是模块,不过并非所有的模块都是类。
模块有些面向过程的感觉,有时候只需要一些方法,并不想定义类时,就可以使用模块。这时的模块主要起命名空间的作用。
Module Base64 def self.encode end def self.decode end end
其中self可以用当前的模块名替换。方法引用方式与类也是一样的
Base64.encode(text),常量也是用“模块名::常量名”的方式引用。
模块还有一种作用叫混入(mixin),如果一个模块定义了实例方法而非类方法,这些实例方法可以混入其它类中。Enumerable与Comparable是两个著名的混入模块。Enumberable模块定义了若干有用的迭代器,它们都基于each迭代器。Enumerable模块自身并没有定义each迭代器,但是如果混入Enumerable模块的类定义了迭代器,它就立刻具有这些强大的迭代器。Comparable也与此类似,它定义了一组比较操作符,后者都是基于通用比较符<=>的,如果你的类定义了<=>,那么混入Comparable模块后,它就能自动拥有<、<=、==、>、>=和between?这些操作符和方法。
想把一个模块混入一个类中, 我们必须使用include。include通常像一个关键字一样被使用:
class Point include Comparable end
实际上,include是Module类的一个私有实例方法,它隐式地被self调用---在这里就是包含模块的类。如果使用方法的形式,上面的代码变为:
class Point include(Comparable) end
include是私有方法,它必须以函数形式被调用,而不能写成self.include(Comparable)。include方法可以接受任意多的Module对象进行混入,因此一个定义了each和<=>的类可以加入下面的代码:
include Enumerable,Comparable
包含一个模块会影响is_a?这个类型检查方法及条件比较符===,在ruby1.8中,String混入了Comparable模块和Enumerable模块:
"text".is_a? Comparable #=>true Enumerable==="text" #=>true in ruby 1.8,false in 1.9
注意instance_of?只对比接收者的类,而不管其超类或模块,所以下面的代码返回false:
"text".instance_of? Comparable #=>false
尽管每个类都是模块,但是include方法不允许把一类包含在另外一个类中,它的参数必须是用module进行声明的模块,而不能是类。
混入一个模块的普通方式是使用Module.include方法,另外一种方法则是使用Object.extend方法,这个方法使指定模块的实例方法成为接收对象的单键方法。(如果接收者对象是一个Class实例,那么这些方法就成为那个类的类方法)。如:
countdown=Object.new #用来遍历 def coutdown.each yield 3 yield 2 yield 1 end #获得Enumerable的方法 countdown.extend(Enumerable) print countdown.sort #prints "[1,2,3]"
感觉上面这段代码意思说得不是很明确,其实主要区别在网上看来的:
引用
* include : mixes in specified module methods as instance methods in the target class
* extend : mixes in specified module methods as class methods in the target class
* extend : mixes in specified module methods as class methods in the target class
module ReusableModule def module_method puts "Module Method: Hi there!" end end class ClassThatIncludes include ReusableModule end class ClassThatExtends extend ReusableModule end puts "Include" ClassThatIncludes.new.module_method # "Module Method: Hi there!" puts "Extend" ClassThatExtends.module_method
有点不同的是,如果实例extend了模块,那么里面的方法就是实例方法:
class InstanceThatExtends end ClassThatExtends.new.extend(ReusableModule).module_method
也就是说extend的即可以作实例方法,也可以作类方法,而include的只能是作实例方法。这也需要注意另一问题,上述情况的基准是module里面的都是实例方法。如果module里面出现了类方法,那么不应该用include或extends来使用,而应该直接用ModuleName.classMethod的方式来引用。大概解释与java差不多,类方法(静态方法)不被继承使用。
发表评论
-
ruby生成java文件的工具
2012-05-17 14:41 1604java开发的很多代码都是 ... -
ruby的require加载
2011-11-15 10:18 3265ruby没有像java那种严格的包管理机制,因此引用起来就有些 ... -
windows上使用mysql2
2011-11-14 14:47 1411想在windows上做ruby应该的可能很底,ruby服务器在 ... -
rexml 中增加CDATA
2011-10-14 14:14 2361最近想用ruby写个能生成 ... -
ruby处理未定义的方法
2010-10-08 17:52 1596关于未定义的方法,《ruby编程语言》上面说得比较詳細了,所以 ... -
rails3的删除问题
2010-08-25 00:38 1688Rails 3所做的很大一个改进就是:Unobtrusive ... -
ROR+mysql的中文问题
2010-08-24 15:28 2313环境: os: ubuntu 10.04 ru ... -
Ubuntu上搭建ruby1.9.2 on rails3rc
2010-08-20 13:34 2253linux的分支不同使用起来还是有很多差别的,最近想用一下比较 ... -
rails3之ActionController
2010-07-29 21:36 3660rails3中有许多变化,现 ... -
windows运行rails3
2010-07-29 11:19 3369虽然rails3的beta版已经出来很久了,但一直没正式版,最 ... -
ruby之enumerator
2010-07-22 00:25 3585由于版本的变更,1.8与1.9在许多地方是不一样的,API变化 ... -
ror中属性值存储的处理
2010-07-19 02:11 1341今天细看了quakewang的那 ... -
一个简单rails应用的开发过程
2010-07-03 16:06 1639基本环境: rails2.3.8 ruby ... -
windows 上使用mongrel
2010-06-30 19:04 2932由于ruby自带了一个webrick的嵌入式服务器,所以以前都 ... -
redmine 一个不错的ror开源项目管理系统
2010-06-30 01:19 2676学了一段时间的ruby,想做点东西,折腾了一下wxruby,但 ... -
ruby的时间与日期
2010-06-04 10:22 4402最近心情稍微好一点,正好现在难得的清闲,于是看了一下ruby的 ... -
ruby方法
2010-05-19 15:29 1928没事做,写着玩的。不过ruby的block,proc,闭包或l ... -
ruby 创建基本的类
2010-05-18 11:15 1187由于ruby的语法很多,看 ... -
ruby编程题
2010-05-15 23:43 1867学了一段时间ruby后,又学了段时间python,学了pyth ... -
ruby on rails入门基础
2010-04-10 01:33 3210最近有想学一下ruby on rails的冲动,JAVA这东西 ...
相关推荐
### Ruby 模块详解 #### 一、Ruby 模块简介 在 Ruby 语言中,模块(Module)是一个非常重要的概念。它不仅提供了一种组织代码的有效方式,还支持一种称为 Mixin 的特殊继承机制。模块可以被视为一个容器,用于存放...
Ruby:Ruby模块与包的深入理解与应用
ncurses-ruby, 用于访问ncurses库的ruby 模块 ncurses红宝石用于访问ncurses库的ruby 模块概述这个自述文件解释了如何使用 ncurses ruby 接口。 假设读者对ncurses库的理解以及如何从C 语言中使用它有一个大致的理解...
Nginx以其高性能、轻量级的特性被广泛用于处理静态内容和反向代理任务,而通过ngx_ruby模块,Nginx可以处理动态内容,提供更灵活的应用场景。 在Nginx配置文件中,可以使用ngx_ruby来定义服务器行为,例如处理HTTP...
Ruby的模块非常类似类,除了: 模块不可以有实体 模块不可以有子类 模块由module…end定义. 实际上…模块的’模块类’是’类的类’这个类的父类.搞懂了吗?不懂?让我们继续看下去吧. 模块有两种用法.其一是将相近的...
在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升...
在描述中提到的“此模块将直接在注册表中更改本地用户的密码”,这暗示了一个特定的Ruby模块可能被设计用来操作Windows操作系统的注册表,这是一个存储系统设置和配置信息的关键数据库。注册表中包含有关用户账户和...
Ruby帽石这是我对Microverse的Ruby模块的顶礼帽项目。 这是一个Web爬虫,旨在帮助您从获取文章。入门先决条件要运行此项目,您需要一台装有Ruby的计算机。 如果不确定如何安装Ruby,请查看制作的本。设置克隆存...
文本框 这是一个ruby模块,可用于与textbelt api(textbelt.com)进行交互安装将此行添加到您的应用程序的Gemfile中: gem 'textgem' 然后执行: $ bundle install或将其自己安装为: $ gem install textgem用法...
1. 源代码:项目的主要代码库,包括Ruby绑定的实现,可能分为多个文件和目录,如`lib/qtbindings`,其中包含了与QT库对应的Ruby模块和类。 2. 示例或测试:为了帮助开发者理解和使用qtbindings,可能会提供一些示例...
AutoC是一个开源项目,主要由Ruby模块组成,专注于自动化C源代码的生成。这个工具集为开发者提供了一种高效的方法来处理C编程中的常见任务,尤其是对于那些涉及大量重复编码的工作,例如创建和管理数据结构。通过...
Ruby模块带来了所有Rick Astley的爱。 安装 将此行添加到应用程序的Gemfile中: gem 'rickgem' 然后执行: $ bundle install 或将其自己安装为: $ gem install rickgem 用法 Rickgem . roll 发展 签出仓库后,...
【标题】"app-academy-hw-with-git:使用Git的App Academy Ruby模块数据结构家庭作业"揭示了这个项目是一个关于学习和练习Ruby编程语言,特别是数据结构的课程作业,而且它利用Git作为版本控制工具。App Academy是...
在上述示例中,`def_module`创建了一个Ruby模块,`def_add`定义了一个方法,该方法调用了Python的`add`函数。`PythonObject.new`用于创建一个Python对象,`send(:__)`则执行了Python函数并返回结果。 PyCall也支持...
fluent-logger-ruby, 用于Fluentd的结构化记录器( ruby ) 录音机 结构化事件记录器示例简单require 'fluent-logger'log = Fluent::Logger::FluentLogger.new(nil, :host => 'localhost',
Ruby基础语法 Ruby变量与数据类型 ...Ruby模块与包 Ruby错误处理 Ruby文件与I/O操作 Ruby正则表达式 Ruby网络编程 Ruby数据库交互 Ruby测试框架 RubyWeb框架Rails入门 Ruby高级特性 Ruby性能优化与最佳实践
gocron是Golang实施Ruby模块的和Python的作业调度包。 另请参阅这两篇出色的文章: 如果您想聊天,可以在Slack找到我们! 概念 调度程序:调度程序跟踪分配给它的所有作业,并确保在准备运行时将其传递给执行程序...
Ruby编程语言通过Re模块简化了构建复杂正则表达式的过程。 Re模块是Ruby中的一个库,专门用来辅助创建和管理正则表达式。使用Re模块,程序员可以以模块化的方式构建正则表达式,将一个复杂的表达式分解为多个小部分...
2. `lib`目录:存放Ruby FCGI库的源代码文件,例如`.rb`结尾的Ruby模块和类定义。 3. `examples`目录:可能包含一些使用Ruby FCGI的示例程序,帮助开发者理解和使用该库。 4. `INSTALL`或`setup.rb`:安装指南,可能...