2010-07-09 8 views
6

माणिक में,रूबी सी एक्सटेंशन: मैं उन सभी अपवादों को कैसे पकड़ सकता हूं, जिनमें मानक त्रुटि नहीं है?

begin 
    # ... 
rescue 
    # ... 
end 

अपवाद StandardError की उपवर्गों नहीं हैं पकड़ नहीं होगा। सी में,

rb_rescue(x, Qnil, y, Qnil); 

VALUE x(void) { /* ... */ return Qnil; } 
VALUE y(void) { /* ... */ return Qnil; } 

वही काम करेगा। मैं रूबी सी एक्सटेंशन से rescue Exception => e कैसे कर सकता हूं (केवल rescue => e की बजाय)?

उत्तर

5

रूबी को अधिक दस्तावेज़ीकरण की आवश्यकता है। मैं गहरे लाल रंग का स्रोत कोड में जाने के लिए किया था, और यह है कि मैं क्या पाया है:

VALUE 
rb_rescue(VALUE (* b_proc)(ANYARGS), VALUE data1, 
     VALUE (* r_proc)(ANYARGS), VALUE data2) 
{ 
    return rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError, 
       (VALUE)0); 
} 

तो, मेरे सवाल (मैं अनुमान) का जवाब होगा:

rb_rescue2(x, Qnil, y, Qnil, rb_eException, (VALUE)0); 

VALUE x(void) { /* ... */ return Qnil; } 
VALUE y(void) { /* ... */ return Qnil; } 
+1

+1 बस एक ही मारा समस्या और इस खोज ने मेरी समस्या का समाधान किया। –

+0

मैं इसे वोट दूंगा, लेकिन यह स्पष्ट नहीं है कि कॉलबैक क्या करता है। बचाव की स्थिति में क्या कहा जाता है? बचाया जा रहा है क्या? –

+0

मुझे लगता है कि 'b_proc'' प्रारंभ' कथन के बाद कोड है, और 'r_proc' बचाव कोड है। – Vortico

संबंधित मुद्दे

 संबंधित मुद्दे