Tôi đang học Ruby và gặp fail
từ 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 fail
từ 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 < 8
vàfail "No user name set" unless username
Câu trả lời:
Trong Ruby, fail
đồng nghĩa với raise
. Các fail
từ khóa là một phương pháp của Kernel
mô-đun được bao gồm bởi lớp Object
. Các fail
phương pháp làm nảy sinh một lỗi thời gian chạy giống như các raise
từ khóa.
Các fail
phương pháp có ba quá tải:
fail
: tăng a RuntimeError
mà không có thông báo lỗi.
fail(string)
: tăng a RuntimeError
vớ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 ArgumentError
chứ 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 fail
phương pháp để bạn có thể truy cập vào các dấu vết bên trong rescue
khối:
fail ArgumentError, "Illegal String", caller
caller
là 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
fail
thay vìraise
để báo hiệu ngoại lệ.''Sử dụng
raise
thay 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, fail
chỉ là một bí danh phổ biến cho raise
phươ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.
raise
khi xử lý các ngoại lệ vàfail
khi không.