写法
两种写法 {} / do..end
note: 一般一行代码用{},多行代码用do..end
1. [1,2,3].each {|i| puts i}
2. [1,2,3].each do |i|
puts i
end
一些重要的规则
- 如果在块的内部有一个变量(variable)的名字和在同一作用域中的块的外部变量的名字一样的话,那么他们表示同一个变量。
ex:
count = 0
[1,2,3,4].each{|value| count += value*value}
puts count #=> 30
二. 如果一个变量只出现在块的内部,那么它仅仅是这个块的内部的局部变量,在块的外面是访问不了的,因为在外面是没有定义的,它只定义在块的内部
ex:
count = 0
[1,2,3,4].each do |value|
square = value*value
count+=square
end
count #=> 30
square #=> undefined local variables or method 'square'
三. block里的参数作为块里面的局部变量,尽管在同一作用域的块的外面有相同名字的变量,它也只是块里面的局部变量 而不同于外的那个同名变量,在这里它们是不同的
ex:
value = "bull shit"
[1,2,3,4].each{|value| puts value}
puts value
#produces
1
2
3
4
bull shit
我们可以在块的参数的后面加个分号然后定义一个块内的局部变量
square = "square object" count = 0 [1,2,3,4].each do |value;square| square = value*value count+=square end puts count #=> 30 puts square #=> square object