Bạn có thể thêm guard vào đầu hàm và tăng ngoại lệ nếu đối số không hợp lệ. Ví dụ:
def my_method(number)
fail ArgumentError, "Input should be greater than or equal to 2" if number < 2
# rest of code follows
# ...
end
# Sample run
begin
my_method(1)
rescue => e
puts e.message
end
#=> Input should be greater than or equal to 2
Bạn có thể xác định custom exception lớp nếu bạn không muốn sử dụng ArgumentError
Nếu bạn đang xây dựng một cái gì đó giống như một khuôn khổ, sau đó, bạn có thể tận dụng meta- kỹ thuật lập trình để chặn các lời gọi phương thức và áp dụng một số xác nhận hợp lệ. Tham khảo Executing code for every method call in a Ruby module. Bạn có thể phải đưa ra một số loại DSL để thể hiện những xác nhận đó - một ví dụ điển hình về việc xác thực DSL là Active Record Validations trong Rails.
Tóm lại, đối với các trường hợp sử dụng hàng ngày, đơn giản raise
(or fail
) và rescue
là đủ. Việc xác thực dựa trên meta-lập trình và DSL chỉ cần thiết nếu bạn đang xây dựng một khung công tác chung.
Nguồn
2016-01-06 16:10:24
Bạn không thể đặt những hạn chế như vậy trực tiếp trong định nghĩa tham số. Bạn có thể thực hiện kiểm tra trong dòng đầu tiên của phần thân của phương thức: 'raise: any if number <2'. – ndn
@ndn, tôi cầu xin sự khác biệt. Xin vui lòng xem câu trả lời của tôi. –