Footprint

We walk and learn


Project maintained by cellzero Hosted on GitHub Pages — Theme by mattgraham

读书笔记:Ruby基础教程第5版

Ruby version: 2.3.0

CH-06 循环


基本语法

times方法

以指定循环次数执行多次。循环的变量从 0 开始计数。

num.times do |i|
  ...
end

for语句

确定循环开始与结束点的循环。

for i in s .. e do
  handle
end

遍历容器元素的循环,既可以遍历数组,也可以遍历散列。

for item in ary do
  handle(item)
end
for k, v in hash do
  handle(k, v)
end

while语句

需要自行处理结束条件的循环。

while cond_true do
  handle
end

until语句

while 语句相反,只有条件不满足时执行循环,当条件满足则结束。

until cond_false do
  handle
end

each方法

同样用来遍历容器,for .. in .. 是此类型的一种语法糖。

obj.each do |v|
  handle(v)
end

loop方法

适合创建没有终止的循环。注意,此为方法并不是语句。

loop do
  handle
end

小结

语法 用途
times方法 确定循环次数时使用
for语句 从对象中取出元素时使用
while语句 希望自由指定循环条件使用
until语句 使用while语句不易理解时使用
each方法 遍历对象元素时使用
loop方法 不限制循环次数时使用

循环控制

语句 用途
break 终止程序,跳出循环
next 跳到下一次循环
redo 在相同的条件下重复刚才处理

其中 redo 一般较少使用。


附录

..... 的区别

两者都是获得从开始点到结束点的区间。区别在于前者包含结束点,后者不包含结束点(可以想象成多了一个 . 把结束点给挤跑了)。

ary = [1, 2, 3, 4, 5, 6, 7]
ary[1..3]    # => [2, 3, 4]
ary[1...3]   # => [2, 3]

do ~ end{ ~ }

两者都为代码块的写法,没有太大区别。约定俗成的规则为:

一种原因在于,do ~ end 写在一行不利于阅读,如:

10.times do |i| puts i end

Back