2008-08-27 5 views
196

Có cuộc gọi chức năng một dòng thoát khỏi chương trình và hiển thị thông báo không? Tôi biết trong Perl nó đơn giản như:Cách tạo thông báo thoát

die("Message goes here") 

tôi mệt mỏi gõ này:

puts "Message goes here" 
exit 
+9

Một chú thích nhỏ, 'puts' của bạn viết thành stdout, trong khi' die' viết thành stderr, do đó: '$ stderr.puts" Thông báo xuất hiện ở đây "'. – cdarke

+0

Tôi biết rằng đây không phải là câu trả lời, nhưng nó trả lời câu hỏi của tôi, cảm ơn – Patrick

+0

Chỉ để tham khảo, trong Python nó là 'sys.exit (" Message go to stderr ")'. –

Trả lời

340

Chức năng abort thực hiện việc này. Ví dụ:

abort("Message goes here") 

Lưu ý: thông điệp abort sẽ được ghi vào STDERR như trái ngược với puts mà sẽ viết thư cho STDOUT.

+6

Wow! Nice tìm! Quá xấu họ không chỉ quá tải thoát với chức năng này .... –

+48

Lưu ý, hủy bỏ thoát khỏi chương trình với một trạng thái sai đại diện cho một thất bại. thoát theo lối ra mặc định với trạng thái đúng là đại diện cho thành công. Hãy chắc chắn rằng bạn sử dụng một trong những quyền cho tình hình. –

+1

lại. Lời nhận xét của Mike Stone, đôi khi có vẻ như Ruby được viết bởi một nhóm những người không liên lạc với nhau, đúng không? (Tuy nhiên, nó rất dễ dàng để lập trình trong đó.) – JellicleCat

2

Tôi chưa bao giờ nghe nói về một chức năng như vậy, nhưng nó sẽ là đủ tầm thường để thực hiện. ..

def die(msg) 
    puts msg 
    exit 
end 

Sau đó, nếu điều này được xác định trong một số tệp .rb mà bạn bao gồm trong tất cả các tập lệnh, bạn vàng .... chỉ vì nó không được xây dựng trong không có nghĩa là bạn không thể làm nó cho mình ;-)

+3

Tắt chức năng 'hủy bỏ' (xem câu trả lời của tôi dưới đây) –

+1

Tại sao phải viết mã khi chức năng hủy bỏ thực hiện điều đó cho bạn? –

+0

@ChrisBunch Đây là ** không ** giống như chức năng hủy bỏ: 'thoát' mặc định trở lại như thể nó đã thành công. 'abort' trả về lỗi. 'exit 1' cũng sẽ trả về lỗi. – TemporalWolf

23

Nếu bạn muốn biểu thị một lỗi thực tế trong mã của bạn, bạn có thể nâng cao một ngoại lệ RuntimeError:

raise RuntimeError, 'Message goes here' 

này sẽ in một stacktrace, loại trừ được nâng lên và thông điệp mà bạn cung cấp. Tùy thuộc vào người dùng của bạn, một stacktrace có thể là quá đáng sợ, và tin nhắn thực tế có thể bị mất trong tiếng ồn. Mặt khác, nếu bạn chết vì một lỗi thực tế, một stacktrace sẽ cung cấp cho bạn thông tin bổ sung để gỡ lỗi.

+23

Bạn không cần phải đề cập đến RuntimeError để nâng cao một (đó là loại ngoại lệ mặc định được nâng lên) để mã sau đây đủ: tăng 'Message goes here' – sunaku

+0

sunaku - trong khi nhận xét của bạn là hoàn toàn hợp lệ, tôi thường thấy rằng rõ ràng hơn có thể hữu ích, đặc biệt đối với những người khác đọc mã sau. – shevy

2

Tôi đã tìm kiếm một cách để thực thi một số mã bất cứ khi nào chương trình kết thúc.
Found this:

Kernel.at_exit { puts "sayonara" } 
# do whatever 
# [...] 
# call #exit or #abort or just let the program end 
# calling #exit! will skip the call 

gọi nhiều lần sẽ đăng ký nhiều bộ xử lý.