Slide 29
Slide 29 text
class Greeter
def initialize(name)
@name = name
end
def hello
"Hello, #{@name}.”
end
end
struct Greeter {
VALUE name;
};
void Greeter_mark(struct Greeter* data) {
rb_gc_mark(data->name);
}
VALUE Greeter_alloc(VALUE self) {
struct Greeter* greeter;
return Data_Make_Struct(self, struct Greeter, Greeter_mark, RUBY_DEFAULT_FREE, greeter);
}
VALUE Greeter_initialize(VALUE self, VALUE name) {
struct Greeter* greeter;
Data_Get_Struct(self, struct Greeter, greeter);
*greeter = name;
return self;
}
VALUE greeter_hello(VALUE self) {
return rb_sprintf("Hello, %"PRIsVALUE".", name);
}
void Init_my_extension() {
VALUE c_Greeter = rb_define_class("Greeter", rb_cObject);
rb_define_alloc_func(c_Greeter, Greeter_alloc);
rb_define_method(c_Greeter, "initialize", Greeter_initialize, 1);
rb_define_method(c_Greeter, "hello", greeter_hello, 0);
}
Ease of use
ֵ͚Κͯͫ