第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)

 

当方法不止一个参数时,预设值必须从右端的参数开始设定。

调用方法时,省略左边的实参或者中间间隔着省略一个实参是非法的。

 

方法的返回值

  1. 在方法中使用return语句,可以指定返回值。
  2. return语句可以省略,这时方法中最后一个语句的计算值会是返回值。
  3. 方法的返回值不一定是最后一行,比如方法中存在条件语句的情况。
  4. return可用在想要在某些条件下直接跳出方法的情况。
  5. 省略return的实参时,则会返回nil。