- 浏览: 454880 次
- 性别:
- 来自: 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 1569java开发的很多代码都是 ... -
ruby的require加载
2011-11-15 10:18 3230ruby没有像java那种严格的包管理机制,因此引用起来就有些 ... -
windows上使用mysql2
2011-11-14 14:47 1376想在windows上做ruby应该的可能很底,ruby服务器在 ... -
rexml 中增加CDATA
2011-10-14 14:14 2330最近想用ruby写个能生成 ... -
ruby处理未定义的方法
2010-10-08 17:52 1558关于未定义的方法,《ruby编程语言》上面说得比较詳細了,所以 ... -
rails3的删除问题
2010-08-25 00:38 1644Rails 3所做的很大一个改进就是:Unobtrusive ... -
ROR+mysql的中文问题
2010-08-24 15:28 2277环境: os: ubuntu 10.04 ru ... -
Ubuntu上搭建ruby1.9.2 on rails3rc
2010-08-20 13:34 2228linux的分支不同使用起来还是有很多差别的,最近想用一下比较 ... -
rails3之ActionController
2010-07-29 21:36 3616rails3中有许多变化,现 ... -
windows运行rails3
2010-07-29 11:19 3328虽然rails3的beta版已经出来很久了,但一直没正式版,最 ... -
ruby之enumerator
2010-07-22 00:25 3543由于版本的变更,1.8与1.9在许多地方是不一样的,API变化 ... -
ror中属性值存储的处理
2010-07-19 02:11 1304今天细看了quakewang的那 ... -
一个简单rails应用的开发过程
2010-07-03 16:06 1603基本环境: rails2.3.8 ruby ... -
windows 上使用mongrel
2010-06-30 19:04 2892由于ruby自带了一个webrick的嵌入式服务器,所以以前都 ... -
redmine 一个不错的ror开源项目管理系统
2010-06-30 01:19 2638学了一段时间的ruby,想做点东西,折腾了一下wxruby,但 ... -
ruby的时间与日期
2010-06-04 10:22 4358最近心情稍微好一点,正好现在难得的清闲,于是看了一下ruby的 ... -
ruby方法
2010-05-19 15:29 1900没事做,写着玩的。不过ruby的block,proc,闭包或l ... -
ruby 创建基本的类
2010-05-18 11:15 1146由于ruby的语法很多,看 ... -
ruby编程题
2010-05-15 23:43 1814学了一段时间ruby后,又学了段时间python,学了pyth ... -
ruby on rails入门基础
2010-04-10 01:33 3167最近有想学一下ruby on rails的冲动,JAVA这东西 ...
相关推荐
ncurses-ruby, 用于访问ncurses库的ruby 模块 ncurses红宝石用于访问ncurses库的ruby 模块概述这个自述文件解释了如何使用 ncurses ruby 接口。 假设读者对ncurses库的理解以及如何从C 语言中使用它有一个大致的理解...
Ruby是一种动态、面向对象的编程语言,它具有简洁、易读的语法,被称为“程序员最好的朋友”。Ruby具有强大的元编程能力,允许开发者在运行时动态修改和生成代码。Ruby还有一个强大的标准库,提供了丰富的工具和功能...
Ruby的模块非常类似类,除了: 模块不可以有实体 模块不可以有子类 模块由module…end定义. 实际上…模块的’模块类’是’类的类’这个类的父类.搞懂了吗?不懂?让我们继续看下去吧. 模块有两种用法.其一是将相近的...
在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升...
Ruby帽石这是我对Microverse的Ruby模块的顶礼帽项目。 这是一个Web爬虫,旨在帮助您从获取文章。入门先决条件要运行此项目,您需要一台装有Ruby的计算机。 如果不确定如何安装Ruby,请查看制作的本。设置克隆存...
文本框 这是一个ruby模块,可用于与textbelt api(textbelt.com)进行交互安装将此行添加到您的应用程序的Gemfile中: gem 'textgem' 然后执行: $ bundle install或将其自己安装为: $ gem install textgem用法...
Ruby模块带来了所有Rick Astley的爱。 安装 将此行添加到应用程序的Gemfile中: gem 'rickgem' 然后执行: $ bundle install 或将其自己安装为: $ gem install rickgem 用法 Rickgem . roll 发展 签出仓库后,...
fluent-logger-ruby, 用于Fluentd的结构化记录器( ruby ) 录音机 结构化事件记录器示例简单require 'fluent-logger'log = Fluent::Logger::FluentLogger.new(nil, :host => 'localhost',
该软件包包含与自动C源代码生成相关的Ruby模块。 当前功能包括:*多源C模块生成器*用于矢量,列表,集合和映射的强类型数据结构生成器
#坦率地说Ruby SDK Ruby gem通过与Frankly的服务器API交互以管理房间,消息和用户,轻松地在应用中创建更深入的Frankly聊天集成。 ###安装 在您的Gemfile中包括 gem 'frankly-ruby', :git => 'git://github....
ngx_ruby 是嵌入 ruby 脚本的 Nginx 模块
复杂的正则表达式很难构建,甚至很难阅读。Ruby的Re模块可以帮助你利用简单的表达式构建复杂的正则表达式
它可以管理不同版本的 RubyGems、Ruby 模块,甚至可以在不同的版本之间比较它们的功能。 另外,我们还可以使用 rvm list known 命令来列出当前可用的所有 Ruby 版本,便于对它们的管理。 总的来说,RVM 是一个非常...
该项目包含以下Ruby枚举方法的我自己版本的实现: 每个; 每个都有索引; 选择; 全部?; 任何?; 没有?; 数数; 地图; 注入。 如果您对上述方法之一有任何疑问,请考虑检查文件。 现场演示 这是该项目中...
您可以将任意Python模块导入Ruby模块,通过从Ruby到Python的自动类型转换来调用Python函数。 支持的Ruby版本pycall.rb支持Ruby 2.3或更高版本。 支持的Python版本pycall.rb支持Python 2.7或更高版本。 请注意,在...
gocron是Golang实施Ruby模块的和Python的作业调度包。 另请参阅这两篇出色的文章: 如果您想聊天,可以在Slack找到我们! 概念 调度程序:调度程序跟踪分配给它的所有作业,并确保在准备运行时将其传递给执行程序...
Rack提供了一个最小化,模块化和适应性强的界面,用于在Ruby中开发Web应用程序。 通过以最简单的方式包装HTTP请求和响应,它将Web服务器,Web框架和软件(所谓的中间件)之间的API统一并提炼成单个方法调用。
编译ruby用到依赖模块(for windows)~~~~
筛选器 滤波器是信号处理中的基本概念。 过滤器反复获取输入值并产生输出值。 类层次结构 筛选 筛选级联 身份过滤器 比较过滤器 MaxFilter(输入,n = nil) MinFilter(输入,n = nil) MeanFilter(输入,n = ...
帮助调试讨厌的API错误响应,或者只是大致了解幕后情况。 到目前为止,由于此问题,此宝石...此gem与以下ruby模块和库一起使用:Net :: HTTP Ethon Excon Opencon Patron HTTPClient HTTParty HTTP这些库至少是一部分