寫法
兩種寫法 {} / 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