- 博客(33)
- 收藏
- 关注
变量一定要有类型吗(二)
变量一定要有类型吗(二)变量一定要有类型吗?不一定。在《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:38
371
变量一定要有类型吗(一)
先讨论一下Ruby是不是强类型。1).在《Beyond Java》[size=7]September 2005[/size] 一书 6.1.2节Typing 中,Bruce Tate举例 irb(main):015:0> "fish"+4 TypeError: cannot convert Fixnum into String fro...
2007-03-01 06:30:00
272
8.4 迭代器、代码块、闭包
先看一句代码:ruby 代码 (1..9).each {|i| print i if i<7} # =>123456 迭代器each 是数组类的一个方法;大括号{ }里的代码是代码块,简称块。你可以用大括号{ }将代码组织成块,也可以用 do…end将代码组织成块。大括号{ }的优先级高于do…end。我们来写一个最简单的块;ruby...
2007-02-13 06:25:50
124
8.3 正则表达式
一本入门小书,不想涉及正则表达式,但是正则表达式与Ruby语言联系如此紧密,总让人感觉绕不开它。所以匆匆结束字符串的介绍,边学边说正则表达式。正则表达式之强大、复杂,由来已久。自从1956年提出了“正则集代数”,正则表达式就逐渐被广泛地应用于操作系统,编程语言,算法设计,人工智能……现在,除了Perl这样支持强大正则表达式功能的语言之外,Java,JavaScript, C# 等语言都纷纷支持...
2007-02-13 06:13:53
138
8.2 再说字符串
一. 生成一个字符串字符串是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:54
97
8.1 再说数组
一. 建立一个数组ruby 代码 #E8.1-1.rb arr1=[] arr2=Array.new arr3=['4 ','5 ','6 '] print arr1, "\n" print arr2, "\n" print arr3, "\n" 运行结果:...
2007-02-13 06:03:44
105
7.4 require 和 load
程序 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.r...
2007-02-13 05:59:55
133
7.3 糅和(Mix-in) 与多重继承
糅和,也译作混合插入,也许就称作 Mix-in 比较合适。现实生活中,一个乒乓球不仅是球类物体,也是有弹性的物体。 C++ 支持多重继承,多重继承有时会导致继承关系的混乱,Java只提供了单继承,通过接口可以得到多重继承的优点,又没有多重继承的缺点。Ruby 也是单继承,不是通过接口,而是通过Mix-in 模块,来实现多重继承的优点。模块的第三个作用:实现了类似多重继承的功能。我们有一个St...
2007-02-13 05:55:26
227
7.1 模块 7.2 命名空间
7.1 模块我们常常把许多零散的小物件放在一个盒子里,或者放在一个抽屉里,这些小物件可能是铅笔,墨水,字典等学习用品,也有可能是不相关的几件物品。在程序中,相关的、不相关的代码的组合,叫作模块。一般情况下,我们总是把功能相关的代码放在一个模块里。把功能相关的程序代码放在一个模块里,体现了模块的第一个作用:可以被其它程序代码重复使用。看程序 E7.1-1.rb :ruby 代码 ...
2007-02-13 05:50:19
109
6.5 访问控制
在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象的方法。控制了对方法的访问,也就控制了对对象属性的访问。控制对方法的访问,有三种方式: 访问控制 意义 ...
2007-02-13 05:43:25
99
6.3 实例变量、类变量、类方法
学习编程的过程,就是深化理解变量的过程。在面向对象编程中也不例外,这一节,我们继续深化理解变量。先把 Ruby 放在一边,从编程语言的视角来探讨变量。如果一个变量,第一次赋值后,就不再允许改变变量值,这样的变量称之为常变量,简称常量。就像数学分析中的常函数,y = 3 是一个平行于 x 轴,并且函数值总是为 3 的函数。常量名用大写字母开头。如果一个变量,在其作用域上的每一个执行点,都...
2007-02-13 05:28:00
279
6.4 单例方法
同一份设计蓝图(类),不同的实例对象,可以表现出不同的行为特征,这种(不牵涉继承的)多态性在Java 这样的静态语言里,通过方法重载得到具体实现。6.1节中我们分析知道了Ruby中的重载是指重写,Ruby 如何来反映不同实例对象的不同行为特征呢?在Ruby里,可以给具体的实例对象添加实例方法,这个方法只属于这个实例对象,我们把这样的方法称之为单例方法。看程序 E6.4-1.rb :ruby...
2007-02-13 05:16:00
135
6.2 增强父类方法
如果我们只是想增强父类的方法,而不是完全地替代它,就可以用关键字super指明。看程序 E6.2-1.rb :Person类的talk方法只是报告姓名。 Student类的talk方法用super来调用Person类的talk方法,报告姓名;随后又加上了一条语句,来表明身份。ruby 代码 #E6.2-1.rb class Person de...
2007-02-13 04:39:00
156
6.1 重载?重写
在Java 中,重载(overload)和重写(override)是用来表现多态性的两种重要方式。override 也有译作“覆盖”、“覆写”。Java 中称作“覆写”比较恰当。重载方法是指一个类中,方法名相同、参数列表不同的几个方法,调用时根据不同的参数调用不同的方法。方法重载与返回类型无关。覆写方法是指子类有一个方法,方法名、参数列表、返回类型与父类的某个方法完全一致。调用时会调用子类的方...
2007-02-13 04:11:00
97
5.5 一些编码建议
这里不是 Ruby语言的编码约定,只是建议,很少的一些建议。在语法正确的前提下,你可以按照自己的编码风格自由组织你的代码。一. 命名常量全用大写的字母,用下划线分割单词。例如:MAX, ARRAY_LENGTH。类名和模块名用大写字母开头的单词组合而成。例如:MyClass, Person。方法名全用小写的字母,用下划线分割单词。例如:talk, is_prime?。在Ruby里,有时将...
2007-02-13 03:37:16
123
5.4 蓝图可以改变吗? ——动态语言
Ruby 是动态语言,你可以改变 Ruby 程序的结构,功能,在Ruby程序运行中。方法、属性可以被加入或去除,新的类或对象可以被建立,新的模块可以出现。请看程序 E5.4-1.rb :ruby 代码 # E5.4-1.rb class Person def talk puts "Today is Satur...
2007-02-13 03:28:49
122
5.3 详解变量—— 动态类型
变量是什么?变量有哪些特征呢?学习编程的过程,就是深化理解变量的过程。先说变量是什么?变量是代号。在数学中,你写下一个小写的英文字母“ f ”,这个 f 可以是数字 5 ,也可以是一个函数式 f = n * n + 1 ,还可以是一个曲面,或者是一个逻辑蕴涵关系…数学里,我们把常用的符号约定俗成,比如π代表圆周率,∑表示求和。编程语言的产生,建立在数学的基础上。在汇编语言的时代,一条语句 ...
2007-02-13 03:22:34
274
5.1 为什么是Ruby? 5.2 Ruby会长久么?
5.1 为什么是Ruby?现在软件生产的代表语言是Java。但Java已老,在主流市场,虽然它还会将继续存在许多年。为什么说Java已老?很怀念Pascal的严谨、优美与高效。Java也一样,是静态语言,沉稳的同时注定了笨重,不善腾挪;而且Java是强静态语言,在需要简略的地方,依然沉稳笨重。仿佛一个绅士,在宴会大厅中彬彬有礼,在厨房里彬彬有礼,在卧室里仍然彬彬有礼。灵气沾不上Java,神来...
2007-02-13 03:16:29
120
4.5 多态
不同的子类继承一个父类,不仅子类和父类的行为有变异,而且子类彼此的行为也有差异,这就是多态。看程序 E4.5-1.rb ,接着4.3节的代码,添加如下:ruby 代码 class Worker < Person def talk puts "I am a worker. my name is "+@name+", age is...
2007-02-13 03:07:52
96
4.4 继承
如果我们要写一个学生类,他当然有姓名、年龄、国籍,他也可以talk,但是应该表明身份是学生。看程序 E4.4-1.rb ,接着上一节的代码,添加如下:ruby 代码 class Student < Person def talk puts "I am a student. my name is "+@name+", age is...
2007-02-13 03:04:33
91
4.3 封装
让我们来定义一个类,类名是Person,类名首字母要大写;属性有姓名@name、年龄@age、国籍@motherland,实例变量用@开头; 方法有一个,叫talk, 方法名和参数名应该用一个小写字母开头或者用一个下划线开头,看程序 E4.3-1.rb 。#=>my name is kaichuan, age is 20 I am a Chinese. my name is Ben,...
2007-02-13 02:53:39
79
4.1 两种思维方式 4.2 对象
4.1 两种思维方式人们起初使用计算机来进行科学计算,比如说:计算级数和,计算积分值。那时,程序要处理的都是带小数点的数字。后来,人们要处理文本,有点麻烦,好在文字也可以转换成数字。这两个时期,编写程序的思想是:一个步骤,一个步骤地告诉计算机如何做,做完一大段步骤,就算完成了一个功能模块。再后来,人们希望计算机能应用在管理中。比如说:机场管理。一个大都市的民航机场,每天有上千架飞机起落,乘客...
2007-02-13 02:47:31
90
3.11 一个综合小练习
还是求50以内的素数,尽可能地用到本章更多的语法,看程序 E3.12-1.rb ; ruby 代码 # E3.12-1.rb 求50以内的素数 $arr=[ ] #建立一个全局数组 $arr $arr[0]=2 def add_prime(n) #定义方法 ...
2007-02-13 02:05:28
84
3.10 循环语句
一. while(当…) 循环while 条件 语句1; 语句2 ; 语句…end二. 单行 while 循环 ( 语句1; 语句2 ; 语句… ) while 条件 三. until(直到…) 循环我们想输出数字1到9,看程序 E3.10-1.rb,E3.10-2.rb : a=1 ...
2007-02-13 01:53:31
108
3.9 条件判断语句
判断条件是否相等用“==”,注意不要写成“=”。一. 单行 if(如果) 语句1) if 条件① then 语句1; 语句2 ; 语句… end 2) (语句1; 语句2 ; 语句… ) if 条件 二. 多行 if 语句if 条件 语句1; 语句2 ; 语句…elsif 条件 语句1; 语句2 ; 语句…e...
2007-02-13 01:30:21
86
3.8 赋值和条件运算符
Ruby 基本的赋值用 “ = ” 来完成,就像 E3.8-1.rb 如下示例:(在不产生歧义的地方,我用 # => 表示答案)ruby 代码 a = 1 ;b = 2 + 3 # => a=1 ,b=5 a ,b = b ,a # => a=5 ,b=1 ...
2007-02-12 01:32:10
123
3.5 标识名和变量的作用域 3.6 类库 3.7 数据类型
3.5 标识名和变量的作用域 Ruby的标识名用来指向常量,变量,方法,类和模块。标识名的首字符用来帮助我们确定标识所指向内容的作用域。一些标识名,就是上面所示的关键字,不能用来当作常量,变量,方法,类或模块的名字。Ruby的标识名区分大小写。Ruby使用一个约定来帮助它区别一个名字的用法:名字前面的第一个字符表明这个名字的用法。局部变量、方法参数和方法名称应该用一个小写字母开头...
2007-02-12 01:18:50
100
3.2 分隔符 3.3 关键字 3.4 运算符
3.2 分隔符关键字、运算符、分隔符一起构成了一门编程语言的基本定义。3.2 、3.3 、3.4节分别对分隔符、关键字、运算符作一些介绍。如果有不详细的地方,将在本书后面部分介绍;或者是因为这些不常用到;还有一种情况是:可以被其它常用语法定义代替。Ruby中的常用分隔符如下: 符号<o:p><...
2007-02-12 01:17:13
101
3.1 注释与分行
Ruby中的注释有单行与多行两种,先看一个程序E3.1-1.rb:ruby 代码 # E3.1-1.rb 从#开始到行尾是单行注释 puts 3/5 puts 3/5.0 =begin puts 6/5 puts 6/5.0 多行注释可以用=begin...
2007-02-12 01:12:48
151
第二章 运行环境
你如果只是想了解Ruby语言,不准备实践,请跳过本章,从第三章开始我们的Ruby语言之旅。2.1 下载Ruby 1.8.5首先下载Ruby 1.8.5(2006-8-25) for Windows:在网页http://www.rubychina.net/downloads/ 上找到--〉Ruby on Windows--〉Ruby 1.8.5 One-Click Installer ...
2007-02-12 01:06:56
121
第一章 概述
1.1 编程语言的发展简史本小节是一些编程语言的简单介绍,你如果不感兴趣,可以略过不看。先说程序是什么?程序就是指令序列的有序集合。指令即代码,可以是数字,也可以是文字,文字最终要转换成数字。也就是说,程序是许多数字串,当然,也可以合并成一个很长很长的数字串。程序的作用是什么?程序能够做事,做你想叫它做的事。换一种说法,程序的功能是完成它的使命。它的使命由编写程序的人来决定,或者由编写程...
2007-02-12 01:05:03
109
对《Ruby入门》元编程的解释
有同学表示第九章元编程的例程不好理解。先道歉,因为能力不足于游刃有余地表达元编程的方方面面,所以我选择了只演示最简单的元编程,而不展开解释。下面给出例程的一点注释,不保证你能理解。对于入门,知道Ruby长于元编程就可以了。ruby 代码 class MetaPerson def MetaPerson.method_missin...
2007-02-11 00:21:44
125
Ruby语言中文教程all in one
Ruby语言中文教程all in one1. Ruby语言进阶教程 已经全部完成,现将 入门部分 和 进阶部分 合二为一,转为 pdf 格式的文件。2. 压缩包里附有书中所有的例程。3. 压缩包里还有一个 SciTE 的中文资源文件,使用请看2.4节。4. 增加了5.5节 一些编码建议。5. 强制类型检测,弱化类型概念,强弱之间,歧义太大,书中强弱类型的提法...
2007-01-16 01:22:49
495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人