Mọi người cứ cho tôi ví dụ về cá chép thay vì cảnh báo. Tại sao? Điều gì làm cho cá chép tốt hơn cảnh báo?Tại sao tôi nên sử dụng Cá chép thay vì cảnh báo trong Perl?
Trả lời
cá chép mang đến cho bạn biết thêm như để nơi thông điệp xuất phát từ (bối cảnh)
#!/usr/bin/perl
use Carp;
foo();
bar();
baz();
sub foo {
warn "foo";
}
sub bar {
carp "bar";
}
sub baz {
foo();
bar();
}
sản xuất
foo at ./foo.pl line 9.
bar at ./foo.pl line 13
main::bar() called at ./foo.pl line 6
foo at ./foo.pl line 10.
bar at ./foo.pl line 14
main::bar() called at ./foo.pl line 19
main::baz() called at ./foo.pl line 7
kinda ngớ ngẩn cho chương trình nhỏ này nhưng có ích khi bạn muốn biết ai gọi là phương pháp đó là carp'ing.
cá chép hoạt động tốt hơn để gỡ lỗi trong các mô-đun. Nếu bạn chỉ viết một kịch bản đơn giản, không có lợi ích. Từ the Carp documenation:
Quy trình cá chép hữu ích trong mô-đun của riêng bạn vì chúng hoạt động như die() hoặc cảnh báo() nhưng có nhiều khả năng hữu ích cho người dùng của mô-đun của bạn. Trong trường hợp của cluck, thú nhận, và longmess bối cảnh đó là một bản tóm tắt của mọi cuộc gọi trong ngăn xếp cuộc gọi. Đối với một tin nhắn ngắn hơn, bạn có thể sử dụng cá chép hoặc croak báo cáo lỗi là từ nơi mà module của bạn được gọi. Không có gì đảm bảo rằng đó là nơi lỗi xảy ra, nhưng đó là một phỏng đoán được giáo dục tốt.
Tôi sử dụng warn
cho tập lệnh và chương trình đơn giản và Carp
bên trong bất kỳ mô-đun nào. Các chương trình con Carp
sử dụng tên tệp và số dòng nơi chương trình con hiện tại của bạn được gọi để dễ tìm ra ai đang gây ra sự cố (không chỉ ở nơi sự cố được thể hiện).
Damian khuyến Carp
thay vì warn
trong "Báo cáo Failure" trong Perl Thực tiễn tốt nhất, nhưng không làm cho sự khác biệt giữa các kịch bản như cấu trúc mã cấp cao nhất và các module như các thành phần mà chương trình sử dụng.
Tôi hầu như không quan tâm đến điều đó gần đây vì tôi đã sử dụng Log::Log4perl để xử lý tất cả điều đó.
Carp
báo cáo lỗi từ góc nhìn của người gọi. Điều này hữu ích cho các mô-đun mà bạn thường muốn cảnh báo về việc sử dụng không chính xác (ví dụ: một đối số bị thiếu) và xác định địa điểm xảy ra lỗi xảy ra trái ngược với nơi phát hiện . Điều này đặc biệt quan trọng đối với các chức năng tiện ích có thể được sử dụng ở nhiều nơi.
Hầu hết các tác giả sử dụng warn
trong tập lệnh và trong mô-đun. Thỉnh thoảng, tôi sử dụng warn
bên trong một mô-đun khi tôi muốn thông báo lỗi phản ánh sự cố trong quá trình triển khai của mô-đun (ví dụ: trường hợp cần hỗ trợ nhưng không.) Có thể cho rằng cluck
sẽ tốt hơn trong các trường hợp như vậy stack backtrace.
- 1. Tôi nên sử dụng gì thay vì printf trong Perl?
- 2. Tại sao nên sử dụng Function.prototype.bind thay vì Function.prototype.call?
- 3. Tại sao tôi nên POST dữ liệu thay vì GET?
- 4. Tại sao tôi không nhận được cảnh báo từ Perl?
- 5. Tại sao tôi nên sử dụng <ARGV> hoặc <> thay vì <STDIN> trong Perl?
- 6. Tại sao nên sử dụng GWT.create() thay vì mới?
- 7. Tôi nên sử dụng gì thay vì com.google.appengine.repackaged *?
- 8. Tại sao tôi nên sử dụng nhibernate thay vì khung thực thể 4
- 9. Tôi có nên sử dụng "sử dụng 5.12.0; sử dụng cảnh báo"; trong một mô-đun perl?
- 10. Tại sao tôi nên sử dụng LoadBalancerProbe thay vì đăng ký vào sự kiện RoleEnvironment.StatusCheck?
- 11. Tại sao tôi nên sử dụng toán tử operator.itemgetter (x) thay vì [x]?
- 12. Tại sao tôi nên sử dụng $ _GET và $ _POST thay vì $ _REQUEST?
- 13. tại sao tôi nên sử dụng dịch vụ android thay vì java thread
- 14. Tại sao không sử dụng nghiêm ngặt và cảnh báo trong Perl?
- 15. Tôi nên sử dụng gì thay vì windows.h trong linux
- 16. Tại sao tôi nên sử dụng glBindAttribLocation?
- 17. Làm thế nào tôi có thể bắt đầu ra từ một con cá chép trong Perl?
- 18. Tôi có nên sử dụng NoSQL thay vì MySQL không?
- 19. Tại sao mã thoát 255 thay vì -1 trong Perl?
- 20. (Tại sao) tôi nên sử dụng obfuscation?
- 21. cảnh báo :: loại cảnh báo và FATAL trong Perl
- 22. Android: tại sao phải sử dụng getBaseContext() thay vì
- 23. Tại sao tôi nên sử dụng Socket.io?
- 24. include() Tại sao tôi không nên sử dụng?
- 25. Tại sao tôi nên sử dụng 'áp dụng' trong Clojure?
- 26. Tại sao nên sử dụng Đầu tiên thay vì FirstOrDefault trong LINQ?
- 27. Vì sao nên sử dụng NSAutoreleasePool?
- 28. Khi nào tôi nên sử dụng UserControl thay vì Trang?
- 29. Tôi nên sử dụng cái gì thay vì sscanf?
- 30. Khi nào tôi nên sử dụng UIImagePickerControllerSourceTypePhotoLibrary thay vì UIImagePickerControllerSourceTypeSavedPhotosAlbum?