On Mar 25, 2008, at 06:24 AM, Detlef Reichl wrote:
> Hi,
>
> i have a method, wich is called with type identifiers like this:
>
>  my_method(Sting, Fixnum)
>
> this method is implemented in a C extension. In this extension it is
> easy to get the name of the parameters with rb_class2name. But how  
> can i
> get the types like T_STRING or T_FIXNUM? If i use BUILTIN_TYPE or  
> TYPE i
> get T_CLASS.

I'm guessing your C implementation looks something like:

my_method(VALUE a, VALUE b) {
}

Since you've passed in the String and Fixnum classes, the C type of  
the RObject your VALUE points to is T_STRING.  If you want an RObject  
with a C type of T_STRING or T_FIXNUM you'll have to pass in a String  
object like "foo" or Fixnum like 5.

If your C function must be passed a String and a Fixnum object, you'll  
need to do duck-type checking, rb_check_string_type() and maybe  
rb_Integer() or rb_to_int().