blocks(塊)

寫法

兩種寫法 {} / do..end
note: 一般一行代碼用{},多行代碼用do..end

1. [1,2,3].each {|i| puts i}
2. [1,2,3].each do |i|
      puts i 
   end

一些重要的規則

  1. 如果在塊的內部有一個變量(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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章