Làm thế nào để bạn nhận ra thành ngữ cố gắng nắm bắt trong smalltalk? Tôi thấy có on:do:
và ensure:
, nhưng không có on:do:ensure:
. Chắc chắn là tôi đang thiếu gì đó.try-catch-finally thành ngữ trong smalltalk
Trả lời
Bạn có thể bọC#on: do chặn trong một khối khác có #ensure: được đính kèm với nó.
Tôi không chắc tôi đã hiểu câu hỏi của bạn, nhưng nếu tôi đã làm và bạn có nghĩa là "cách xử lý ngoại lệ nếu nó được kích hoạt và tiếp tục thực hiện bình thường", thì đây là những gì bạn có thể làm:
[self doWhatever] on: SomeException do: [self handleSomeException].
self continueNormally.
Kiểm tra tất cả các lớp con của Ngoại lệ để xem loại ngoại lệ nào bạn có thể chụp.
Hy vọng điều đó đã hữu ích!
Khối cuối cùng không chỉ được thực hiện khi thực hiện tiếp tục bình thường mà còn khi một ngoại lệ bỏ chọn ngăn xếp như Smalltalk #ensure :. Xem các câu trả lời khác. –
Nếu bạn thực sự cần đến nó, bạn có thể thêm một giao thức để BlockClosure:
#on: anErrorOrSet do: errorBlock ensure: finallyBlock
[ self on: anErrorOrSet do: errorBlock ]
ensure: finallyBlock
mà sẽ hoạt động giống như thử: catch: cuối cùng: trên java.
Đó là sự kỳ diệu của Smalltalk (tốt, một phần nhỏ của nó), nếu không có phù hợp cho nhu cầu của bạn, bạn luôn có thể mở rộng nó :)
Đây là cách bạn có thể viết nó ra khỏi hộp trong hầu hết các phương ngữ Smalltalk.
[[ "try{}" ]
on: Error
do: [:ex | "catch{}"]]
ensure: ["finally{}"]
Hoặc bạn có thể mở rộng BlockClosure như @EstebanLM được khuyến nghị.
- 1. Java tương đương Smalltalk trở thành:
- 2. Ngôn ngữ lập trình nào (ngoài Smalltalk) là hình ảnh?
- 3. Các khối Smalltalk trong Objective-c?
- 4. Trách nhiệm duy nhất trong smalltalk
- 5. Hình ảnh hoặc tệp trong GNU Smalltalk?
- 6. String to Integer Smalltalk
- 7. Smalltalk và IoC
- 8. Thư hoàng tử gửi trong Pharo smalltalk
- 9. Phân tích cú pháp RDF trong Smalltalk
- 10. tokens Finding trong Smalltalk String với PetitParser
- 11. Dữ liệu tồn tại trong Smalltalk/Seaside
- 12. Biên dịch 'hello, world' GNU smalltalk
- 13. Smalltalk có phải là ngôn ngữ phát triển khả thi cho Mac OS X không?
- 14. khẳng định không thành công khi nó không nên, trong thử nghiệm đơn vị Smalltalk
- 15. Lưu trữ Smalltalk đã mất ở đâu?
- 16. Chức năng biến thể Smalltalk
- 17. (Mis) Hiểu Smalltalk và TDD
- 18. jquery .val() + = thành ngữ
- 19. Route cho việc học Smalltalk aka Squeak
- 20. khóa tập tin thành ngữ trong clojure?
- 21. A min = thành ngữ trong C++?
- 22. Sự khác nhau giữa ANSI Smalltalk và Smalltalk-80 là gì?
- 23. IO thành ngữ với scala
- 24. Smalltalk Learning Project: Bất kỳ đề xuất nào?
- 25. Relearning C: Thành ngữ mới?
- 26. x86 thành ngữ lắp ráp
- 27. Mã thành ngữ là gì?
- 28. Python và Smalltalk - So sánh khả năng lập trình Metaprogram
- 29. File ReadAllLines biến ngôn ngữ nước ngoài thành ngữ pháp ()
- 30. Hoàn tác việc xóa các phương thức trong Squeak Smalltalk
Ah thực sự. Tôi nghĩ về nó nhưng bằng cách nào đó tôi nghĩ rằng nó sẽ thực hiện khối bên trong hai lần, bởi vì cả hai #on: do: và #ensure: send #value. – milan
'#ensure:' 's gửi' # value' sẽ đánh giá nội dung của nó, nó sẽ gửi '#on: do:' đến nội dung của nó, từ đó sẽ gửi '# value' đến khối trong cùng, cuối cùng sẽ Làm gì đó hữu ích. Nói cách khác, hai '# value' gửi sẽ được gửi đến các khối khác nhau. –