- 浏览: 83684 次
- 性别:
最近访客 更多访客>>
最新评论
-
Bernice_liu:
谢谢分享,受益匪浅,适合我——初学者
Ruby语言中文教程all in one -
何枫abc:
怎么感觉Ruby有点像C!!!
3.5 标识名和变量的作用域 3.6 类库 3.7 数据类型 -
何枫abc:
谢谢了!!!你写的很好,现在我正在学Ruby!!!
第二章 运行环境 -
yangzhihuan:
正想知道ruby是怎么样生成像javadoc那样的文档,多谢了 ...
3.1 注释与分行 -
whisper:
从lambda演算的角度说我们并不关心一个东西到底是什么,而只 ...
变量一定要有类型吗(一)
文章列表
变量一定要有类型吗(二)
变量一定要有类型吗?不一定。
在《The Ruby Way 2nd》一书中,1.2.3节 Constants, Variables, and Types
“In Ruby, variables do not have types, but the objects they refer to still have types. ” 在Ruby中,变量没有类型,但变量引 ...
- 2007-03-01 07:05
- 浏览 1905
- 评论(0)
先讨论一下Ruby是不是强类型。
1).在《Beyond Java》September 2005 一书 6.1.2节Typing 中,Bruce Tate举例
irb(main):015:0> "fish"+4
TypeError: cannot convert Fixnum into String
from (irb):15:in‘+’
from (irb):15
从而得出结论:
引用 That means Ruby is strongly typed.
我们知道,Ruby是动态语言,在运 ...
先看一句代码:
ruby 代码
(1..9).each {|i| print i if i<7} # =>123456
迭代器each 是数组类的一个方法;大括号{ }里的代码是代码块,简称块。你可以用大括号{ }将代码组织成块,也可以用 do…end将代码组织成块。大括号{ }的优先级高于do…end。
我们来写一个最简单的块;
ruby 代码
#E8.4-1.rb
def one_block
yield
yield
yield
...
- 2007-02-13 06:25
- 浏览 1766
- 评论(0)
一本入门小书,不想涉及正则表达式,但是正则表达式与Ruby语言联系如此紧密,总让人感觉绕不开它。所以匆匆结束字符串的介绍,边学边说正则表达式。
正则表达式之强大、复杂,由来已久。自从1956年提出了“正则集代数”,正则表达式就逐渐被广泛地应用于操作系统,编程语言,算法设计,人工智能……
现在,除了Perl这样支持强大正则表达式功能的语言之外,Java,JavaScript, C# 等语言都纷纷支持正则表达式,只不过支持的程度不同。而Ruby正是一种强烈而灵活地支持正则表达式的语言。
下面,我努力尝试尽可能简单地描述Ruby中的正则表达式。
正则表达式(regular expression)描述了 ...
- 2007-02-13 06:13
- 浏览 1559
- 评论(0)
一. 生成一个字符串
字符串是String类的对象,一般使用字面值来创建。
ruby 代码
#E8.2-1.rb
str1 = 'this is str1'
str2 = "this is str2"
str3 = %q/this is str3/
str4 = %Q/this is str4/
...
- 2007-02-13 06:07
- 浏览 1340
- 评论(0)
一. 建立一个数组
ruby 代码
#E8.1-1.rb
arr1=[]
arr2=Array.new
arr3=['4 ','5 ','6 ']
print arr1, "\n"
print arr2, "\n"
print arr3, "\n"
运行结果:
>ruby E8.1-1.rb
4 5 6
>Exit code: 0
二. 访问数组元素
Ruby以整数作为下标,访问数组 ...
- 2007-02-13 06:03
- 浏览 1466
- 评论(0)
程序 E7.3-1.rb中先写了Me模块,然后include Me模块,实现了Mix-in功能,但是,这样没能做到代码复用。
我将 Me模块写在文件 E7.4-1.rb中,将 Person类写在文件 E7.4-2.rb中,这时候 Student类如何使用 Me模块和 Person类呢?这里要用到require方法。
看程序 E7.4-3.rb :
ruby 代码
#E7.4-3.rb
require "E7.4-1"
require "E7.4-2"
class Student < ...
- 2007-02-13 05:59
- 浏览 1357
- 评论(0)
糅和,也译作混合插入,也许就称作 Mix-in 比较合适。
现实生活中,一个乒乓球不仅是球类物体,也是有弹性的物体。 C++ 支持多重继承,多重继承有时会导致继承关系的混乱,Java只提供了单继承,通过接口可以得到多重继承的优点,又没有多重继承的缺点。Ruby 也是单继承,不是通过接口,而是通过Mix-in 模块,来实现多重继承的优点。
模块的第三个作用:实现了类似多重继承的功能。
我们有一个Student类,有着Person类的属性和方法,还会做数学题——求平方根。已经有了Me模块,只要Mix-in 在Student类里就可以了。
看程序 E7.3-1.rb :
ruby 代码
...
- 2007-02-13 05:55
- 浏览 1806
- 评论(0)
7.1 模块
我们常常把许多零散的小物件放在一个盒子里,或者放在一个抽屉里,这些小物件可能是铅笔,墨水,字典等学习用品,也有可能是不相关的几件物品。在程序中,相关的、不相关的代码的组合,叫作模块。一般情况下 ...
- 2007-02-13 05:50
- 浏览 2241
- 评论(0)
在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象的方法。控制了对方法的访问,也就控制了对对象属性的访问。
控制对方法的访问,有三种方式:
访问控制
意义
public
- 2007-02-13 05:43
- 浏览 1174
- 评论(0)
学习编程的过程,就是深化理解变量的过程。在面向对象编程中也不例外,这一节,我们继续深化理解变量。
先把 Ruby 放在一边,从编程语言的视角来探讨变量。
如果一个变量,第一次赋值后,就不再允许改变变量值,这样的变量称之为常变量,简称常量。就像数学分析中的常函数,y = 3 是一个平行于 x 轴,并且函数值总是为 3 的函数。常量名用大写字母开头。
如果一个变量,在其作用域上的每一个执行点,都可以改变变量值,这样的变量称之为可变量,简称变量。
如果一个变量,其作用域遍及在程序的任何位置,这样的变量称之为全局变量;与之相对,作用域仅限于在程序的某一单元的变量,称之为局部变量。
面向对象的编程,以类为 ...
- 2007-02-13 05:28
- 浏览 2272
- 评论(0)
同一份设计蓝图(类),不同的实例对象,可以表现出不同的行为特征,这种(不牵涉继承的)多态性在Java 这样的静态语言里,通过方法重载得到具体实现。6.1节中我们分析知道了Ruby中的重载是指重写,Ruby 如何来反映不同实例对象的不同行为特征呢?
在Ruby里,可以给具体的实例对象添加实例方法,这个方法只属于这个实例对象,我们把这样的方法称之为单例方法。
看程序 E6.4-1.rb :
ruby 代码
#E6.4-1.rb
class Person
def talk
puts "Hi! " ...
- 2007-02-13 05:16
- 浏览 1038
- 评论(0)
如果我们只是想增强父类的方法,而不是完全地替代它,就可以用关键字super指明。看程序 E6.2-1.rb :Person类的talk方法只是报告姓名。 Student类的talk方法用super来调用Person类的talk方法,报告姓名;随后又加上了一条语句,来表明身份。
ruby 代码
#E6.2-1.rb
class Person
def talk(name)
print "my name is #{name}."
end
end
cl ...
- 2007-02-13 04:39
- 浏览 1028
- 评论(0)
在Java 中,重载(overload)和重写(override)是用来表现多态性的两种重要方式。override 也有译作“覆盖”、“覆写”。Java 中称作“覆写”比较恰当。
重载方法是指一个类中,方法名相同、参数列表不同的几个方法,调用时根据不同的参数调用不同的方法。方法重载与返回类型无关。
覆写方法是指子类有一个方法,方法名、参数列表、返回类型与父类的某个方法完全一致。调用时会调用子类的方法,而屏蔽掉父类的同名方法。需要注意的是,子类覆写的方法,其可访问性一定要强于或等同于,父类被覆写的同名方法。
覆写发生在子类和父类之间,当然也可以是子类和父类的父类之间。重载不仅仅是发生在子类和父类之 ...
- 2007-02-13 04:11
- 浏览 1925
- 评论(0)
这里不是 Ruby语言的编码约定,只是建议,很少的一些建议。在语法正确的前提下,你可以按照自己的编码风格自由组织你的代码。
一. 命名
常量全用大写的字母,用下划线分割单词。例如:MAX, ARRAY_LENGTH。
类名和模块名用大 ...
- 2007-02-13 03:37
- 浏览 1138
- 评论(0)