Tôi đang học Ruby và gặp failtừ khóa. Nó có nghĩa là gì?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
Tôi đang học Ruby và gặp failtừ khóa. Nó có nghĩa là gì?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
fail "Password too short" if password.length < 8vàfail "No user name set" unless username
Câu trả lời:
Trong Ruby, failđồng nghĩa với raise. Các failtừ khóa là một phương pháp của Kernelmô-đun được bao gồm bởi lớp Object. Các failphương pháp làm nảy sinh một lỗi thời gian chạy giống như các raisetừ khóa.
Các failphương pháp có ba quá tải:
fail: tăng a RuntimeErrormà không có thông báo lỗi.
fail(string): tăng a RuntimeErrorvới đối số chuỗi dưới dạng thông báo lỗi:
fail "Failed to open file"
fail(exception [, string [, array]]): đưa ra một ngoại lệ của lớp exception(đối số đầu tiên) với thông báo lỗi tùy chọn (đối số thứ hai) và thông tin gọi lại (đối số thứ ba).
Ví dụ: Giả sử bạn xác định một hàm sẽ bị lỗi nếu đưa ra một đối số không hợp lệ. Tốt hơn là tăng một ArgumentErrorchứ không phải RuntimeError:
fail ArgumentError, "Illegal String"
Ví dụ khác: Bạn có thể vượt qua toàn bộ vết lùi đến failphương pháp để bạn có thể truy cập vào các dấu vết bên trong rescuekhối:
fail ArgumentError, "Illegal String", caller
callerlà một phương thức Kernel trả về backtrace dưới dạng một mảng các chuỗi trong biểu mẫu file:line: in 'method'.
Không có đối số, tăng ngoại lệ trong $! hoặc tăng RuntimeError nếu $! là con số không. Với một đối số Chuỗi duy nhất, tạo ra RuntimeError với chuỗi dưới dạng thông báo. Nếu không, tham số đầu tiên phải là tên của một lớp Ngoại lệ (hoặc một đối tượng trả về một đối tượng Ngoại lệ khi được gửi một thông báo ngoại lệ). Tham số thứ hai tùy chọn đặt thông báo được liên kết với ngoại lệ và tham số thứ ba là một mảng thông tin gọi lại. Các ngoại lệ được bắt bởi mệnh đề cứu hộ của khối begin ... end.
Nguồn: Tài liệu Ruby về Kernel Module .
raise
Rubocop nói về cách sử dụng của cả hai từ;
'Sử dụng
failthay vìraiseđể báo hiệu ngoại lệ.''Sử dụng
raisethay vìfailđể ném lại các ngoại lệ.'
Đây là một ví dụ.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail == raise
Nói cách khác, failchỉ là một bí danh phổ biến cho raisephương pháp sửa lỗi. Sử dụng:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org là bạn của bạn. Khi tôi googled rubydoc fail" Kernel " là lần đầu tiên bị tấn công. Lời khuyên của tôi là, khi nghi ngờ, hãy tìm đến nguồn cuối cùng để biết những thứ chắc chắn như thế này.
raisekhi xử lý các ngoại lệ vàfailkhi không.