Niềng răng xác định một chức năng ẩn danh, được gọi là một khối. Các thẻ giữa các đường ống là các đối số của khối này. Số lượng đối số bắt buộc phụ thuộc vào cách khối được sử dụng. Mỗi lần khối được đánh giá, phương thức yêu cầu khối sẽ chuyển một giá trị dựa trên đối tượng đang gọi nó.
Cũng giống như xác định phương thức, chỉ có nó không được lưu trữ ngoài phương thức chấp nhận một khối.
Ví dụ:
def my_print(i)
puts i
end
sẽ làm điều tương tự như thế này khi thực hiện:
{|i| puts i}
sự khác biệt duy nhất là các khối được định nghĩa một cách nhanh chóng và không được lưu trữ.
Ví dụ 2: Các câu sau đây là tương đương
25.times &method(:my_print)
25.times {|i| puts i}
Chúng tôi sử dụng các khối ẩn danh vì đa số các chức năng thông qua như là một khối thường cụ thể đối với tình hình của bạn và không đáng định để tái sử dụng.
Vậy điều gì xảy ra khi phương thức chấp nhận một khối? Điều đó phụ thuộc vào phương pháp.Các phương thức chấp nhận một khối sẽ gọi nó bằng cách truyền các giá trị từ đối tượng gọi của chúng theo cách được xác định rõ. Những gì được trả lại phụ thuộc vào phương thức yêu cầu khối.
Ví dụ: Trong 25.times {|i| puts i}
. Số lần gọi khối một lần cho mỗi giá trị giữa 0 và giá trị của người gọi, chuyển giá trị vào khối dưới dạng biến tạm thời i. Times trả về giá trị của đối tượng gọi. Trong trường hợp này 25.
Hãy xem phương thức chấp nhận một khối có hai đối số.
{:key1 => "value1", :key2 => "value2"}.each {|key,value|
puts "This key is: #{key}. Its value is #{value}"
}
Trong trường hợp này, mỗi lệnh gọi khối cho mỗi cặp khóa/giá trị chuyển khóa làm đối số thứ nhất và giá trị làm đối số thứ hai.
Câu hỏi liên quan: http://stackoverflow.com/questions/665576/what-are-those-pipe-symbols-for-in-ruby –