e$B!!$5$5$@$G$9!#e(B
e$B!!e(BCe$B$G5-=R$7$?%a%=%C%I$NEPO?$r$^$H$a$F9T$($J$$$G$7$g$&$+!#e(B
e$B!!6qBNE*$K$O!":#e(B
void
Init_foo(void)
{
VALUE klass = …;
rb_define_method(klass, “foo”, foo_func, 0);
rb_define_method(klass, “bar”, bar_func, 1);
rb_define_method(klass, “baz”, baz_func, -1);
}
e$B$H$"$k$N$r!"e(B
typedef struct {
char name;
VALUE ()(ANYARGS);
int argsize;
} rb_method_definition_info_t;
void
Init_foo(void)
{
VALUE klass = …;
const rb_method_definition_info_t[] = {
{“foo”, foo_func, 0},
{“bar”, bar_func, 1},
{“baz”, baz_func, -1},
};
rb_define_methods(klass, method_info_table,
sizeof(method_info_table)/
sizeof(rb_method_definition_info_t));
}
e$B$N$h$&$K=q$/$?$a$N7?e(B rb_method_definition_info_t e$B$He(B
rb_define_methods
API e$B$NDI2C$G$9!#e(B
e$B!!%a%j%C%H$O!"e(B
a) rb_define_method e$B$rJB$Y$k$h$j$b!“0lMw$K$J$C$FFI$$d$9$$e(B
b) e$B$^$?!"%a%=%C%I$NDI2C:o=|$bMF0W$K$J$k!J$+$b!Ke(B
c) Ce$B%a%=%C%IDI2C$4$H$K%a%=%C%I%-%c%C%7%e$r%/%j%"$7$F$$$k$,!"e(B
e$B$3$l$OL5BL$J$N$G;$a$?$$e(B
d) e$B%a%=%C%IDI2C$N$?$a$K2?$+$r%m%C%/$9$kI,MW$,!”$3$l$+$i$"$ke(B
e$B$+$b$7$l$J$$$,!"$=$l$,0l2U=j$G:Q$`$h$&$K$J$ke(B
e$B!!$^$!!"$$$D$b$N$h$&$K!";d$NK>$_$Oe(B c, d
e$B$J$N$G$9$,!"$$$+$,$G$7$g$&$+!#e(B
e$B!!8!F$;v9`$H$7$F$O!“e(Brb_method_definition_info_t e$B$Oe(B
visibility e$B$r4^$a$F$be(B
e$B$$$$$h$&$J5$$,$9$k!”$H$$$&$H$3$m$G$7$g$&$+!#$[$H$s$I$Oe(B public
e$B$J$s$@$+e(B
e$B$i!"MW$i$J$$$H;W$$$^$9$,!#e(B