ruby way之OOP之二

1 理解allocate

在一些特殊的环境中,你可能需要不调用它的构造器(也就是initialize)来创建一个对象。也就是说 你想要创建一个空的对象.例如,假设你有一个对象,它的状态完全的由它的存取方法所确定,因此如果 你不是真的想要一个另外的状态的话,调用new方法是没必要的.此时我们能allocate方法.

Ruby代码

class Person 
 attr_accessor :name, :age, :phone 
 
 def initialize(n,a,p) 
  @name, @age, @phone = n, a, p 
 end 
 def test 
  p "aaa" 
 end 
end 
 
p1 = Person.new("John Smith",29,"555-1234") 
 
p2 = Person.allocate 
 
p p1.age  # 29 
p p2.age  # nil 
p2.test

2 Modules

在ruby中使用Modules有两个原因.第一个原因是namespace 的管理,当我们在module中存储常量和方法 时,我们将会有更少的命名冲突.调用module中的方法和类方法很类似,就是模块名+方法名.因此我们看 到File.ctime 和FileTest.exist?, 时,我们从表面无法知道 File和FileTest是模块还是类.

第二个原因更有趣,我们能使用模块进行mixin.关于什么是mixin,就不说了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 模块
, 方法
, 构造器
, 一个
原因
the ruby way 3rd pdf、the ruby way、the ruby way pdf、learn ruby hard way、the ruby way中文版,以便于您获取更多的相关知识。

时间: 2024-08-21 23:10:03

ruby way之OOP之二的相关文章

建立一个典型的Ruby On Rails网站(二)

这是第二部分,主要是Mysql数据库的分布式设计.我建立环境的时候,基本上没有把数据库分开.为用到的时候,做准备吧. 主从结构的数据库设计 www.eol.org 项目本身有主从数据库和读写分开的数据库设计. (Master/Slave)和Rails核心数据库与应用核心数据库分离.主要依靠以下插件实现: use_db : 主要功能是将不同的models 分布到不同的数据库.详细说明见下:(http://rails.elctech.com/blog/using-and-testing-rails-

ruby way之Io之二

1 检测文件是否存在及其大小 FileTest的 exist?方法可以检测一个文件是否存在: flag = FileTest::exist?("LochNessMonster") flag = FileTest::exists?("UFO") # exists? is a synonym for exist? 如果我们想要知道文件是否有内容,可以使用File::Stat的zero? 方法: flag = File.new("somefile").

ruby way之OOP之一

1 使用多个构造方法 在ruby中没有像c++或者ruby中的构造器,可是我们依然能够创建出类似的多个构造器: Ruby代码 class ColoredRectangle def initialize(r, g, b, s1, s2) @r, @g, @b, @s1, @s2 = r, g, b, s1, s2 end def ColoredRectangle.white_rect(s1, s2) new(0xff, 0xff, 0xff, s1, s2) end def ColoredRect

ruby:理解Symbol的二篇好文章

理解 Ruby Symbol,第 1 部分 http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl/   理解 Ruby Symbol ,第 2 部分: Symbol 内幕http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl2/index.html

Ruby简洁学习笔记(二):类继承、属性、类变量_ruby专题

1.如何声明一个子类 复制代码 代码如下: class Treasure < Thing 这样Thing类中的属性name,description都被Treasure继承 2.以下三种方式传入父类initialize方法的参数分别是什么? 复制代码 代码如下: # This passes a, b, c to the superclass def initialize( a, b, c, d, e, f ) super( a, b, c ) end # This passes a, b, c t

Ruby之基础介绍(二)

前言 上一篇我们简单介绍了下Ruby,这一节我们开始正式步入Ruby的世界,一探究竟. Ruby特点 (1)面向对象支持. (2)动态语言:我们可以修改已经定义过的类,也可以为现有类添加实例方法. (3)可移植性好:不仅可以运行在UNIX操作系统上,还可以运行在Windows等操作系统上. (4)弱类型语言:变量无需声明,变量没有类型,变量可以保存任何类型的数据. (5)支持自动垃圾回收机制:避免我们手动进行垃圾回收. (6)强大的异常处理机制:保证Ruby程序的健壮性. (7)简洁的语法:提供

ruby way之高级OOP特性之一

1 发送一条消息给一个对象 当你调用一个方法时,你也就是发送了一条消息给一个对象,在ruby中我们能够在运行时决定那个方 法被调用.send 方法就是做这个的,他接受一个symbol为参数. 举个简单的例子,假设我们要写一个排序,我们想要使用不同的域作为比较的key.虽然我们这时可以 用block,可是如果使用send的话,我们能有一个更优美的写法: Java代码 class Person attr_reader :name, :age, :height def initialize(name,

不懂Ruby的程序员,如何快速读懂Ruby代码

本问答的目标读者是不了解Ruby语言.但有别的编程语言经验的人. Ruby语言的代码可读性是很强的.本问答只把一些语法特点.以及别的语言中可能没有或不同的东西展现出来,目的在于让有别的编程语言经验的人能快速读懂Ruby代码. 注意本问答讲的是Ruby语言本身(基于版本1.9),而不是Ruby on Rails,后者是Ruby的一种DSL,语言面貌上和Ruby有一定差异.   Q:Ruby最有特点的语法形式是什么? 或许是方法后接代码块的大量使用,以下面这行代码为例: file.each_line

没有Rails,Java程序员如何使用Ruby

一.引言 Ruby on Rails仅是使Ruby成为伟大的一个因素,这就象EJB仅是Java企业平台的一个组成部分一样.本文将带你一同讨论,作为一名Java开发者,仅利用Ruby自身所能够实现的功能. 首先让我先澄清一些问题.第一,这不是一篇关于Ruby on Rails的文章.如果你想了解Rails,那么每周都出版新的文章和博客来颂扬这种令人激动的框架及其各种特征.第二,本文并非在预告,在目前出现一些更好的语言.工具和框架(如Ruby on Rails)时,Java平台即将崩溃.因此,本文与