什么是块?
本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 15 课,共 56 课。
你已经写过代码块了。每次你写 each do |x| ... end 时,do 和 end 之间的部分都是一个代码块:传递给方法的一段代码。
[1, 2, 3].each do |n|
puts n * 2
end这里,each 是数组上的方法,do |n| ... end 是代码块。each 会对每个元素运行一次代码块,并将该元素作为 n 传入。
块不是存储在变量中的独立对象,而是直接与方法调用绑定。方法要么接收一个块,要么不接收,而大多数迭代方法(each、map、select、times)都是为接收一个块而设计的。
3.times do |i|
puts "hi #{i}"
end不带代码块调用方法,会改变它的行为。不带代码块的 [1,2,3].map 会返回一个枚举器,而不是转换后的数组,因此代码块是方法含义的一部分。
挑战
入门从输入中读取一个整数 n。使用 times 方法和代码块,为 i 从 0 到 n - 1 的每个值打印消息 Iteration <i>。
输入 3 时,输出为:
Iteration 0
Iteration 1
Iteration 2亲手试试
n = gets.to_i
# TODO:用带代码块的 n.times 打印每次循环的结果
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Ruby 在线编译器