[ do some work ]
on: ZeroDivide, Warning
do: [ :ex | what you want ]
उसी दस्तावेज़ में, यह सुनिश्चित करने के लिए ensure
के साथ एक उदाहरण है कि कोड हमेशा निष्पादित होता है (किसी भी अपवाद के बावजूद):
[ doSomething ] ensure: [ alwaysExecuteThis ]
हालांकि, मुझे कुछ ऐसा चाहिए:
[ do some work ]
on: ZeroDivide
do: [ :zeroDivide | handle it ]
on: Warning
do: [ :warning | handle it ]
ensure: [ alwaysExecuteThis ]
बेशक, यह मेरा जावा अनुभव है जो प्रभावित करता है कि मैं फारो का उपयोग कैसे करना चाहता हूं।
2 जवाब
नेस्टेड का उपयोग करके ऐसा लगता है कि यह संभव है ब्लॉक:
[ [ [ [ doSomething here ]
on: ZeroDivide
do: [ :zeroEx | 'zeroExc' crLog ] ]
on: Warning
do: [ :warning | 'warning' crLog ] ]
ensure: [ 'ensure' crLog ] ]
इस विधि को BlockClosure
में जोड़ने का प्रयास करें:
on: exception1
do: block1
on: exception2
do: block2
^self on: exception1 , exception2 do: [:ex |
(exception1 handles: ex)
ifTrue: [block1 value: ex]
ifFalse: [block2 value: ex]]
ध्यान दें कि exception1
और exception2
, Exception
के उपवर्ग हो सकते हैं या ExceptionSet
के उदाहरण (#,
के साथ निर्मित) हो सकते हैं।
संबंधित सवाल
नए सवाल
exception
एक अपवाद एक असामान्य स्थिति है जिसे कार्यक्रम के सामान्य प्रवाह से विचलन की आवश्यकता होती है। आम तौर पर, एक अपवाद के परिणामस्वरूप कुल विफलता नहीं होनी चाहिए, लेकिन इसके बजाय एक अपवाद हैंडलर द्वारा भाग लिया जाना चाहिए। अपवाद हैंडलिंग कई प्रोग्रामिंग भाषाओं में एक अंतर्निहित निर्माण है। आमतौर पर, अपवाद को स्टैक को अनइंस्टॉल करके नियंत्रित किया जाता है, इस प्रकार अपवाद के दायरे से बाहर एक परिभाषित स्थिति में वापस चला जाता है, और फिर एक हैंडलर ब्लॉक या रूटीन को लागू करना।