मैं रूबी के लिए एक सी एक्सटेंशन लिखने की कोशिश कर रहा हूं जो कक्षा उत्पन्न करेगा। मैं देख रहा हूं कि कक्षा में कुछ डिफ़ॉल्ट तर्क कैसे परिभाषित करें। उदाहरण के लिए, अगर मैं रूबी में इस वर्ग के decleration है:सी में रूबी विस्तार - कार्य करने के लिए डिफ़ॉल्ट तर्क मान निर्दिष्ट करने के लिए कैसे?
class MyClass
def initialize(name, age=10)
@name = name
@age = age
end
end
आप इसे mc = MyClass.new("blah")
साथ प्रारंभ कर सकते हैं, और उम्र पैरामीटर आंतरिक रूप से स्थापित किया जाएगा। मैं सी में यह कैसे करूँ? अब तक मैं यह मिल गया है, लेकिन इस बलों अन्य तर्क में प्रवेश:
require "ruby.h"
static VALUE my_init(VALUE self, VALUE name, VALUE age)
{
rb_iv_set(self, "@name", name);
rb_iv_set(self, "@age", age);
return self;
}
VALUE cMyClass;
void Init_MyClass()
{
// create a ruby class instance
cMyClass = rb_define_class("MyClass", rb_cObject);
// connect the instance methods to the object
rb_define_method(cMyClass, "initialize", my_init, 2);
}
मैं Qnil
के खिलाफ age
का मूल्य जाँच या if (TYPE(age) == T_UNDEF)
का उपयोग कर के बारे में सोचा है, लेकिन मैं तो बस वहाँ से segfaults मिलता है। README.EXT
के माध्यम से पढ़ना मुझे विश्वास दिलाता है कि मैं इसे rb_define_method
के माध्यम से argc
के मान का उपयोग करके पूरा कर सकता हूं, लेकिन यह बहुत स्पष्ट नहीं था। कोई विचार? धन्यवाद।
महान लिखने अप, मैं इसे दो बार करता है, तो मैं कर सकता वोट दें चाहते हैं - धन्यवाद! – sa125