Có lẽ câu hỏi thực sự của tôi là "Đây có phải là một tính năng thích hợp cho Học tập Perl 6" không? Dựa trên Should this Perl 6 CATCH block be able to change variables in the lexical scope?, có vẻ như ví dụ đơn giản nhất có thể vượt quá một ví dụ đơn giản.Khi nào tôi muốn tiếp tục ngoại lệ Perl 6?
Trong câu hỏi đó, tôi đang làm việc với những thứ có vẻ ngớ ngẩn hoặc tốt hơn theo một cách khác cho vấn đề cụ thể đó bởi vì tôi đang chơi với tính năng hơn là giải quyết vấn đề. Có các tài liệu được sử dụng cảnh báo như loại đặc biệt của trường hợp ngoại lệ ("kiểm soát trường hợp ngoại lệ"), nơi bạn nhận được tin nhắn, có thể bắt nó nếu bạn thích, nhưng cũng có thể bỏ qua nó và nó sẽ tiếp tục ngày của riêng mình (mặc dù tôi đã được thông báo.). khá ngu ngốc về điều này trong Where should I catch a Perl 6 warning control exception?).
Ngoài ra, tôi đang nghĩ về những thứ mà người gọi có thể xử lý lỗi ngoài phạm vi của callee. Ví dụ, kết nối lại với một cơ sở dữ liệu, sửa các thư mục còn thiếu và các vấn đề tài nguyên bên ngoài khác mà callee không có trách nhiệm.
Khi đọc về loại điều này bằng các ngôn ngữ khác, lời khuyên chủ yếu là không sử dụng chúng vì trong lập trình "thế giới thực", mọi người có xu hướng không thực sự xử lý vấn đề.
Câu trả lời cho C# exception handler resume next có vẻ như là thực hành kém và mã xấu. Tôi chắc chắn đã không tìm ra một cách để ẩn một loạt các mã trong callee.
Tôi đã hack ví dụ này, mặc dù tôi không tin rằng đó là một cách hay để làm điều đó hoặc một điều gì đó để giới thiệu cho người mới bắt đầu. Chương trình tìm kiếm một tệp PID khi nó bắt đầu. Nếu nó tìm thấy một, nó ném một ngoại lệ. Xử lý ngoại lệ đó kiểm tra xem cá thể kia vẫn đang chạy, có thể ném một loại ngoại lệ khác. Và, có một để xử lý các vấn đề IO tập tin. Bí quyết là X::MyProgram::FoundSemaphore
có thể tiếp tục nếu chương trình khác không chạy (nhưng để lại tệp PID phía sau).
Không quan trọng đối với câu hỏi, nhưng lưu ý rằng 'BEGIN' chạy vào thời gian biên dịch. Mô-đun được biên dịch tại thời điểm cài đặt, vì vậy mã này được đặt trong một mô-đun có thể không làm những gì được dự định. 'INIT' có vẻ là một cược tốt hơn cho việc khởi động chương trình, và sẽ hoạt động tốt trong trường hợp mô-đun. –
Có, INIT có vẻ tốt hơn. –