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 to the superclass

def initialize( a, b, c )
  super
end

# This passes no arguments to the superclass

def initialize( a, b, c)
  super()
end

第一种把参数中a,b,c传入父类initialize方法;第二种传入全部参数,但不加上括号;第三种不传入参数

3.属性的setter/getter

有人这样写setter/getter:

puts( t1.get_description ) t1.set_description( “Some description” )

这样似乎更方便一些:

puts( t1.description )
t1.description = “Some description”

如果你想用第二种写法,你不得不这么写:

def description
    return @description
end 

def description=( aDescription )
    @description = aDescription
end

注:这是正确的:def name=(aName)

  但这却是错的:def name  =(aName)

你看出差别的了吗?

根据上一章,你可以知道,这里定义了两个方法:description方法和description=方法。原来是通过将"="加入方法名实现的,ruby真是神奇,Java就不能这样写。

然而,事实上有更简单的方法来实现setter/getter

attr_reader :description
attr_writer :description

由一个attr_reader/attr_writer加上符号(:description)构成,事实上,可以一次为多个元素设置setter/getter

attr_writer(:name, :description) attr_accessor(:value, :id, :owner)

attr_accessor

等价于:

attr_reader :value

attr_writer :value

4.super

和Java不一样,Ruby中的super方法可以出现在任何方法中,而不只是initialize(构造方法)中。

在第2点中就对super方法的使用有介绍,单独的super将所有参数传给父类initialize,而带参数的super则将指定参数传给父类initialize。

# This passes aName, aDescription to the superclass
def initialize( aName,aDescription )
  super( aName, aDescription )
end

# This passes a, b, c to the superclass‘s aMethod
def aMethod( a, b, c )
  super
end

5.常量和嵌套类(constants & nested class)

class X
 A = 10

 class Y
  def xyz
   puts( "goodbye" )
  end
 end

 def self.abc
  puts("hello")
 end
end

常量:以大写字母开头的变量。

如果要访问常量或内部类,需用 ::

puts( X::A )
X::abc        # 你也可以用::来调用方法
X.abc        # 当然这样也可以

ob = X::Y.new
ob.xyz

6.部分类(Partial Class)

在Ruby中可以对现存的类进行修改,并影响已经生成的对象

class A
  def a
    puts ‘a‘
  end
end

a = A.new
a.public_methods(false)//打印A class所有public的方法
# => [:a] //只有a

class A
  def b
    puts ‘b‘
  end
end

a.public_methods(false)
# => [:a, :b]//有a和b

而不能修改的,是类继承了哪个类。比如

class A
  def a
    puts ‘a‘
  end
end

class A < String
  def c
    puts ‘c‘
  end
end
# TypeError: superclass mismatch for class A# 所有类默认继承了Object类,A也继承了Object,所以当你让A继承String时就会报错
时间: 2024-10-02 12:58:15

Ruby学习-第二章的相关文章

java学习第二章总结

连续上了一个星期的课,也算慢慢适应了这种紧张的学习节奏.现在来总结下第二章所学的内容: 第二章主要是讲java的基础语法,他主要由这几个方面构成:常量,变量,数据类型,关键字,标识符,运算符,表达式,注释以及语句等构成. 数据类型是java控制内存的关键元素,java通过数据类型声明来对变量或者常量进行内存空间的分配,并将其标注好名称(即标识符).不同的数据类型,所分配的空间大小都不一样:整型中byte,short,int,long所对应的空间大小分别为1,2,4,8个字节:浮点型中float,

oracle学习 第二章 限制性查询和数据的排序 ——03

这里,我们接着上一小节2.6留下的问题:如果要查询的字符串中含有"_"或"%",又该怎样处理呢? 开始今天的学习. 2.7  如何使用转义(escape)操作符 可以是用个转义(escape)关键字来完成此任务.为了进行练习,我们必须先创建一个临时的表,之后再往该表中插入1行记录,其包含通配符.可能您现在还可能十分不理解例2-13和例2-14的SQL语句.没有问题,您只要照着输入就可以了. 例 2-13 SQL> CREATE TABLE dept_temp

Java基础知识二次学习-- 第二章 基础语法与递归补充

第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下划线,$,数字组成,应该由字母,下划线$开头,同时应该避开java保留字符 变量是内存中的一小块区域,使用变量名来访问这块区域 执行过程中的内存管理(疑问:这里的内存和Jvm的一样吗?) code segment 存放代码 data segment 静态变量 字符串常量 stack 栈 局部变量 h

linux基础学习 第二章-第四章笔记

第二章 ####linux系统结构#### linux系统结构是倒树形 /bin        ###二进制可执行文件也就是系统命令 /sbin       ###系统管理命令存放位置 /boot       ###启动分区,负责系统启动 /dev        ###设备管理文件 /etc        ###大多数系统管理文件 /home       ###普通用户的家目录 /lib        ###32位系统库文件存放位置 /lib64      ###64位系统库文件存放位置 /me

tornado的学习——第二章(模板与表单)

链接:http://demo.pythoner.com/itt2zh/ch2.html 来到了第二章:模板与表单 1 # -*- coding:utf-8 -*- 2 3 __author__ = 'roy' 4 5 import os.path 6 7 import tornado.httpserver 8 import tornado.ioloop 9 import tornado.options 10 import tornado.web 11 12 from tornado.option

LinQ In Action 学习第二章

第二章主要复习.net 3.0 与Linq 有关的新知识 1.隐式类型: 必须初始化不能赋值null,只是由编译器推测其类型罢了 2. 对象初始化器,集合初始化器 1,2 很简单就不介绍了 3. lamdor 表达式 涉及到委托 需要好好研究一下 委托. 4. 扩展方法 5.匿名类型

Ruby学习-第一章

第一章 字符串,数字,类和对象 为了证明Ruby真的好用,hello world也能写的如此简洁: puts 'hello world' 1.输入/输出 print('Enter your name') name=gets() puts("Hello #{name}") 注:Ruby是区分大小写的 2.String类 puts("Hello #{name}")中的变量 name是内嵌在整个String里的,通过 #{ } 包裹进行内嵌求值,并用双引号"&q

【转载】Gradle学习 第二章:概述

转载地址:http://ask.android-studio.org/?/article/6 Here is a list of some of Gradle's features.<翻译>以下是关于Gradle特点的描述 Declarative builds and build-by-convention 宣言和公约At the heart of Gradle lies a rich extensible Domain Specific Language (DSL) based on Gro

LINUX学习第二章

过了10天时间,学习了Linux系统精讲课程,期间因为有其他学习上的事情需要处理,导致学习速度比较慢.接下来的学习时间需要加快速度,全身心地投入了. 2-0单用户模式 root密码重置 reboot----3秒内随便按一个健进入一个界面----选中第二行按下e ----进入另一个界面,在最后一行的最后加一个 1然后按回车----再按b----顺利进入1模式下 指令 runlevel 查看模式 指令 passwd 更改密码 设置新密码后reboot重启 2-1救援模式 另一种修改root密码的方式