Tôi có thể xác định trạng thái thoát khỏi quy trình của bản thân trong khối at_exit không?ruby at_exit trạng thái thoát
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
Tôi có thể xác định trạng thái thoát khỏi quy trình của bản thân trong khối at_exit không?ruby at_exit trạng thái thoát
at_exit do
if this_process_status.success?
print 'Success'
else
print 'Failure'
end
end
sử dụng ý tưởng từ tadman
at_exit do
if $!.nil? || $!.is_a?(SystemExit) && $!.success?
print 'success'
else
code = $!.is_a?(SystemExit) ? $!.status : 1
print "failure with code #{code}"
end
end
Mặc dù tài liệu này rất mỏng, $! được thiết lập là ngoại lệ cuối cùng xảy ra, và sau khi exit() gọi đây là ngoại lệ SystemExit. Đưa hai cùng bạn có được điều này:
at_exit do
if ($!.success?)
print 'Success'
else
print 'Failure'
end
end
Đó sẽ là trường hợp duy nhất nếu exit sẽ được gọi. Chắc chắn tôi có thể được kiểm tra nếu $! là không hoặc là SystemExit mà câu trả lời đúng về sự thành công? Nhưng có thể nhận được Process :: Status object hoặc nó không được tạo ra cho quá trình trên không? – tig
sử dụng ý tưởng của bạn Tôi đã nhận được câu trả lời và được đăng nhưng tôi không biết câu trả lời nào tốt hơn để đánh dấu - của bạn hoặc của tôi? – tig
Bất cứ điều gì phù hợp với bạn. Không biết bạn có thể "trả lời" câu hỏi của riêng bạn, nhưng được rồi. – tadman
chỉ là ý kiến của tôi là cung cấp cho "kiểm tra" để tadman thay vì chính mình/nhún vai. –
Tôi nghĩ rằng câu trả lời đầy đủ nhất nên được kiểm tra. Kiểm tra là hữu ích nhất cho những người dùng khác tìm kiếm câu trả lời và tôi không nghĩ rằng bất cứ điều gì sẽ thay đổi cho tôi và tadman, bất cứ câu trả lời tôi sẽ kiểm tra. – tig
Tôi nghĩ rằng sử dụng 'at_exit' cho điều này là ok cho các kịch bản nhỏ. Đối với các ứng dụng lớn hơn, bạn nên sử dụng 'thoát' (hoặc gọi phương thức của riêng bạn để xử lý thoát) tại các điểm xuất phát dự định và xử lý lỗi, ngoại lệ và tín hiệu một cách rõ ràng. – Kelvin