Ruby - Khối

Bạn đã thấy cách Ruby định nghĩa các phương thức mà bạn có thể đặt số lượng câu lệnh và sau đó bạn gọi phương thức đó. Tương tự, Ruby có một khái niệm về Block.

  • Một khối bao gồm các đoạn mã.

  • Bạn gán tên cho một khối.

  • Mã trong khối luôn được đặt trong dấu ngoặc nhọn ({}).

  • Một khối luôn được gọi từ một hàm có cùng tên với tên của khối. Điều này có nghĩa là nếu bạn có một khối với kiểm tra tên , thì bạn sử dụng kiểm tra hàm để gọi khối này.

  • Bạn gọi một khối bằng cách sử dụng câu lệnh lợi nhuận .

Cú pháp

block_name {
   statement1
   statement2
   ..........
}

Ở đây, bạn sẽ học cách gọi một khối bằng cách sử dụng một câu lệnh lợi nhuận đơn giản . Bạn cũng sẽ học cách sử dụng câu lệnh lợi nhuận với các tham số để gọi một khối. Bạn sẽ kiểm tra mã mẫu với cả hai loại báo cáo lợi nhuận .

Báo cáo lợi nhuận

Hãy xem một ví dụ về tuyên bố lợi nhuận -

#!/usr/bin/ruby

def test
   puts "You are in the method"
   yield
   puts "You are again back to the method"
   yield
end
test {puts "You are in the block"}

Điều này sẽ tạo ra kết quả sau:

You are in the method
You are in the block
You are again back to the method
You are in the block

Bạn cũng có thể chuyển các tham số bằng câu lệnh lợi nhuận. Đây là một ví dụ -

#!/usr/bin/ruby

def test
   yield 5
   puts "You are in the method test"
   yield 100
end
test {|i| puts "You are in the block #{i}"}

Điều này sẽ tạo ra kết quả sau:

You are in the block 5
You are in the method test
You are in the block 100

Ở đây, câu lệnh lợi nhuận được viết theo sau là các tham số. Bạn thậm chí có thể chuyển nhiều hơn một tham số. Trong khối, bạn đặt một biến giữa hai đường thẳng đứng (||) để chấp nhận các tham số. Do đó, trong đoạn mã trước, câu lệnh lợi nhuận 5 chuyển giá trị 5 làm tham số cho khối kiểm tra.

Bây giờ, hãy xem câu lệnh sau:

test {|i| puts "You are in the block #{i}"}

Ở đây, giá trị 5 được nhận trong biến i . Bây giờ, hãy quan sát câu lệnh put sau đây :

puts "You are in the block #{i}"

Đầu ra của câu lệnh put này là:

You are in the block 5

Nếu bạn muốn truyền nhiều hơn một tham số, thì câu lệnh lợi nhuận sẽ trở thành:

yield a, b

và khối là -

test {|a, b| statement}

Các tham số sẽ được phân tách bằng dấu phẩy.

Các khối và phương pháp

Bạn đã thấy cách một khối và một phương thức có thể liên kết với nhau. Bạn thường gọi một khối bằng cách sử dụng câu lệnh lợi nhuận từ một phương thức có cùng tên với tên của khối. Do đó, bạn viết -

#!/usr/bin/ruby

def test
   yield
end
test{ puts "Hello world"}

Ví dụ này là cách đơn giản nhất để triển khai một khối. Bạn gọi khối kiểm tra bằng cách sử dụng câu lệnh lợi nhuận .

Nhưng nếu đối số cuối cùng của một phương thức đứng trước &, thì bạn có thể chuyển một khối cho phương thức này và khối này sẽ được gán cho tham số cuối cùng. Trong trường hợp cả * và & đều có trong danh sách đối số, & sẽ xuất hiện sau.

#!/usr/bin/ruby

def test(&block)
   block.call
end
test { puts "Hello World!"}

Điều này sẽ tạo ra kết quả sau:

Hello World!

Khối BEGIN và END

Mọi tệp nguồn Ruby đều có thể khai báo các khối mã để chạy khi tệp đang được tải (các khối BEGIN) và sau khi chương trình kết thúc thực thi (các khối END).

#!/usr/bin/ruby

BEGIN { 
   # BEGIN block code 
   puts "BEGIN code block"
} 

END { 
   # END block code 
   puts "END code block"
}
   # MAIN block code 
puts "MAIN code block"

Một chương trình có thể bao gồm nhiều khối BEGIN và END. Các khối BEGIN được thực thi theo thứ tự mà chúng gặp phải. Các khối END được thực hiện theo thứ tự ngược lại. Khi được thực thi, chương trình trên tạo ra kết quả sau:

BEGIN code block
MAIN code block
END code block