数组和 Range 可以响应的方法中有很多都可以跟着一个块(block)
(1..5).each { |i| puts 2 * i }
这个代码在 Range (1..5)
上调用了 each
方法,然后又把 { |i| puts 2*i }
这个块传递给 each
方法。|i|
两边的竖杠在 Ruby 句法中是用来定义块变量的。只有这个方法才知道如何处理后面跟着的块。本例中,Range 的 each
方法会处理后面的块,块中有一个本地变量 i
,each
会将 Range 中的各个值传进块中然后执行相应的操作。
块可以多于一行,也经常是多于一行的。本书中我们会遵照一个常用的约定,当块只有一行简单的代码时使用花括号形式;当块是一行很长的代码,或者多行时使用 do..end
形式:
(1..5).each do |number| ?> puts 2 * number >> puts '--' >> end 2
%w[a b c] # 再说一下,%w 可以创建元素为字符串的数组
puts (1..5).to_a.inspect # 输出一个数组字面量形式