Tham số của khối lệnh
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 18 trên 56.
Các biến nằm giữa hai dấu gạch đứng, |x|, |x, y|, là tham số của khối lệnh (block parameters). Chúng đặt tên cho các giá trị mà phương thức truyền vào khối lệnh.
Một số phương thức truyền một giá trị, số khác truyền nhiều giá trị. each truyền từng phần tử một:
[10, 20, 30].each { |n| puts n }each_with_index truyền hai giá trị: phần tử và chỉ số (index) của phần tử đó:
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# 0: a
# 1: b
# 2: cKhi duyệt qua một hash, các tham số của khối lệnh là khóa và giá trị:
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endSố lượng và thứ tự các tham số của khối phụ thuộc vào giá trị mà phương thức (method) trả về. Nếu chưa chắc, hãy xem tài liệu hoặc thử dùng một tham số để xem kết quả.
Thử thách
DễĐã cho từ điển scores. Lặp qua dạng to_a của nó bằng each_with_index để bạn có thể truy cập cả cặp (name, points) lẫn vị trí của cặp đó. In mỗi mục trên một dòng theo định dạng sau:
<rank>. <name> - <points>Trong đó rank bắt đầu từ 1 (không phải 0).
Với từ điển mặc định, đầu ra là:
1. Alice - 90
2. Bob - 85
3. Cara - 78Tự làm thử
scores = { "Alice" => 90, "Bob" => 85, "Cara" => 78 }
# TODO: in ra "<rank>. <name> - <points>" cho từng mục, thứ hạng bắt đầu từ 1
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng xử lý
1Tìm hiểu sâu về chuỗi
Tổng quan về phương thức chuỗiNội suy chuỗiDuyệt qua chuỗiTách và nối chuỗiÔn tập: Đan chuỗi4Khối lệnh, Proc và lambda
Khối lệnh là gì?do..end và dấu ngoặc nhọnTừ khóa yieldTham số của khối lệnhProc và lambdaÔn tập: bộ lặp tùy chỉnh7Hash, phần 2
Hash.new với giá trị mặc địnhLặp qua HashHash lồng nhauGộp và chuyển đổiÔn tập: Bộ đếm tần suất10Dự án: Hồ sơ học sinh
Tổng quan dự ánThêm học sinh2Phạm vi
Phạm vi là gì?Các phương thức của phạm viPhạm vi trong case / whenÔn tập: luyện tập với phạm vi5Sức mạnh của Enumerable
select và rejectNối chuỗi mapreduce / injectcount, all?, any?, none?group_by và partitionsort_by, min_by, max_byÔn tập: quy trình dữ liệuTự luyện tập: Trình biên dịch Ruby online