第1章 对象与变量、常数
一个变量属于哪一种变量,是由变量名称决定的。
(1)局部变量 变量名以小写字母或“_”起始地变量。
(2)全局变量 变量名以“$”起始的变量。
(3)实例变量 变量名以“@”起始的变量。
(4)类变量 变量名以“@@”起始的变量。
(5)虚拟变量 “true“,”false“,”self“等特定名称的变量。
常数名称必须以大写字母开始。
Ruby保留字一览表
BEGIN |
do |
next |
then |
END |
else |
nil |
true |
alias |
elsif |
not |
undef |
and |
end |
or |
unless |
begin |
ensure |
redo |
until |
break |
false |
rescue |
when |
case |
for |
retry |
while |
class |
if |
return |
yield |
def |
in |
self |
_FILE_ |
defined? |
module |
super |
_LINE_ |
看对象持有值是否相等,可以使用“==”及eql?方法。在施行“==”时,需要进行必要的转换,eql?可以不需要转换就能进行比较。
p 1.0 == 1 #=> true |
p 1.0.eql?1 #=> false |
第2章 条件判断
真 |
假 |
false与nil以外的所有对象 |
false与nil |
为了让返回真假值得方法可以一目了然,Ruby的习惯是在命名时,在最后面加上“?”字符。自己定义方法的时候,最好也配合这个习惯。
条件语句
if 条件1 then 语句1 elseif 条件2 then 语句2 else 语句3 end (* then可以省略) |
unless 条件 语句1 else 语句2 end |
if 条件 语句2 else 语句1 end |
case 想要比较的对象 when 值1 then 语句1 when 值2 then 语句2 else 语句3 end (*then可以省略, when处可以一次指定多值。) |
unless 条件 then 语句 end (* then可以省略) |
while line=gets case line when /^From:/i print “找到寄件人信息。\n” when /^To:/i print “找到收件人信息。\n” when /^Subject:/i print “找到主题信息。\n” when /^$/i print “邮件头部分析结束。\n” exit else ## 跳过不读 end end |
当字符串以From:开始时,显示出“找到寄件人信息。” “/^$/”这个正则表达式的意思是一行的前端紧接着一行的尾端,简单的说就是空行。头部与正文之间一定要空一行,这是电子邮件的规则。 |
if与unless也可以写在想要执行的语句后面。格式如下:
print “a比b大” if a>b
在case表达式中,判断与when后指定的值是否一致可以使用“===”运算符来表示。“===”的左边如果是数值或字符串,则意义与“==”是一样的。在正则表达式的场合下相当于“=~”,即匹配判定。在类的场合下,判断“===”右边的对象是否是类的实例。
case表达与if表达间的转换,when指定的对象在if表达式中总是在“===”的左边,这点要特别注意。
case value when A 处理1 when B 处理2 else 处理3 end |
if A === value 处理1 elseif B === value 处理2 else 处理3 end |
第3章 循环
在Ruby中,实现循环的方式大致有下面两种:
(1) 使用循环专用的语句
(2) 使用方法。将程序语句块传递给方法,而在语句块内写出想要重复执行的程序动作。
|
语句 |
方法 |
times |
|
√ |
for |
√ |
|
while |
√ |
|
until |
√ |
|
each |
|
√ |
loop |
|
√ |
times方法
想要重复的次数.times do 想要重复执行的动作 end |
想要重复的次数.times { 想要重复执行的动作 } |
10.times { |i| … } |
可获知现在是循环到第几次。 循环次数是从0开始的。 |
for语句
for 变量 in 开始的数值 .. 结束的数值 do 想要重复执行的动作 end |
for 变量 in 对象 do 想要重复执行的动作 end |
do可以省略 |
例: 计算变量from到to的和
from = 10 to = 20 num = 0 (to-from+1).times { |i| sum = sum + (i+from) } print sum, “\n” |
from = 10 to = 20 sum = 0 for i in from..to sum += 1 end print sum, “\n” |
while语句 |
while 条件 do 想要重复执行的动作 end |
do可以省略 |
until 语句 |
until 条件 do 想要重复执行的动作 end |
do可以省略 |
until语句实际上是可以使用while语句配合“!”运算符取代的。
each方法用来从对象的集合众逐项取得数据。
对象. each do |变量| 想要重复执行的动作 end |
对象.each {|变量| 想要重复执行的动作 } |
loop方法,没有结束条件,只是不断进行循环处理的方法。
loop { 想要重复执行的动作 } |
用来控制循环的命令
命令 |
用途 |
break |
停止动作,马上跳出循环 |
next |
直接跳到下一次循环 |
redo |
以相同的条件重新进行这一次循环 |
例: 从文件中读取数据,跳过空行与以“#”开始的行,并显示出来
file = open (ARGV[0]) while text = file.gets next if /^\s*$/ =~ text # 空白行 next if /^#/ =~ text # 以“#”开始的行 print text end |
第4章 方法
调用方法的典型语法: 对象.方法名(实参1, 实参2, …, 实参n) # 括号可省
Ruby语言根据接收者的不同,可以将方法分为3类:实例方法、类方法、函数性的方法
调用类方法时,“.”也可以写成“::”。
没有接收者的方法,称为函数性的方法。事实上,说是“没有接收者”,起始并不是真的没有接收者对象,只是函数性的方法省略了它而已。函数性的方法都设计成不会因为接收者状态的不同而影响执行结果。如:
sin(3.14) sleep(10) print “Hello~” |
定义方法的典型语法
def 方法名(参数1, 参数2,…) 想要执行的动作 end |
方法名可以是英文字母、下划线,数字,但不能以数字开头。 |
def hello (name = “Ruby”) print (“Hello”, name, “.\n”) end hello() hello(“Susan”) |
可以为参数指定预设值。预设值是没指定实参时使用的值,写成“参数名=值”的形式。
|
def func(a, b=1, c=2)
|
当方法不止一个参数时,预设值必须从右端的参数开始设定。 调用方法时,省略左边的实参或者中间间隔着省略一个实参是非法的。 |
方法的返回值
- 在方法中使用return语句,可以指定返回值。
- return语句可以省略,这时方法中最后一个语句的计算值会是返回值。
- 方法的返回值不一定是最后一行,比如方法中存在条件语句的情况。
- return可用在想要在某些条件下直接跳出方法的情况。
- 省略return的实参时,则会返回nil。