Tuesday, October 21, 2008

(2)循环语句

Ruby提供三种简单的循环while,until和for,while循环执行“当”条件表达式为true,until循环执行“直到”条件表达式为true:
x = 10               # 初始化一个循环计数器变量
while x >= 0 do # 如果x大于等于0就之一执行循环
puts x # 打印x的值
x = x - 1 # 递减x的值
end # 循环结束

# 执行这个循环知道x的值大于0就结束循环
x = 0 # 初始化循环计数器
until x > 10 do # 开始循环
puts x
x = x + 1
end # 结束循环
和if语句一样Ruby也提供了一个在一行代码中完成循环的变体:
x = 0                          # 初始化循环计数器
puts x = x + 1 while x < 10 # 执行循环

a = [1,2,3] # 初始化一个数组
puts a.pop until a.empty? # 循环的从数组中移除元素,知道这个数组为空。
这里有一种特殊情况,如果循环执行的代码是一个begin end包含起来的一段代码块,那么代码块的内容会先于循环逻辑判断:
x = 10              # 初始化循环计数器
begin # 在循环表达式判断之前,这段代码会至少执行一次
puts x
x = x - 1
end until x == 0
注意,如果你的代码块不是放在begin end之间,而是放在()中,那么不会在until判断之前执行代码块中的内容:
x = 0               # 初始化
( # 这种方式的代码片段如果条件表达式判断失败不会执行。
puts x
x = x - 1
) until x == 0
最后一个循环是for/in循环,它一般用于数组或者Range,字典对象,用于在这些对象的元素中迭代取值并执行代码,和while until一样,do关键字是可选的,for关键字后跟一个变量,或者用逗号分隔的多个变量,用于代表数组或字典中的元素,所有数组或者字典中的元素全部遍历一遍之后,循环就结束:
# 打印数组中的所有元素
array = [1,2,3,4,5]
for element in array
puts element
end

# 打印字典对象的键/值
hash = {:a=>1, :b=>2, :c=>3}
for key,value in hash
puts "#{key} => #{value}"
end
实际上for /in 循环是基于for语句内容对each方法的实现,比如上面的代码可以写成这样:

hash = {:a=>1, :b=>2, :c=>3}
hash.each do |key,value|
puts "#{key} => #{value}"
end

No comments: