We walk and learn
Ruby version: 2.3.0
以指定循环次数执行多次。循环的变量从 0 开始计数。
num.times do |i|
...
end
确定循环开始与结束点的循环。
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 cond_true do
handle
end
同 while 语句相反,只有条件不满足时执行循环,当条件满足则结束。
until cond_false do
handle
end
同样用来遍历容器,for .. in .. 是此类型的一种语法糖。
obj.each do |v|
handle(v)
end
适合创建没有终止的循环。注意,此为方法并不是语句。
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{ ~ }一种原因在于,do ~ end 写在一行不利于阅读,如:
10.times do |i| puts i end