El Jueves, 22 de Octubre de 2009, Iñaki Baz Castillo escribió:
> Hi, I'm trying to create a CustomError exception in a Ruby C extension and
>  raise it:
> 
>   VALUE class_standard_error = rb_const_get(rb_cObject,
>  rb_intern("StandardError")); VALUE class_custom_error =
>  rb_define_class_under(class_standard_error, "ClassError", rb_cObject);
>  rb_raise(class_custom_error, "Oh, a custom error occurred !!!");
> 
> Unfortunatelly when running it I get:
> 
>   ArgumentError: wrong number of arguments(1 for 0)
>     ./test_unit.rb:22:in `initialize'
>     ./test_unit.rb:22:in `new'
>     ./test_unit.rb:22:in `my_function'
>     ./test_unit.rb:22:in `test_01
> 
> Being "my_function" the Ruby method calling to the above C code.
> 
> I suspect that the line:
>   rb_raise(class_custom_error, "Oh, a custom error occurred !!!");
> is not correct. How should look the first argument?
> 
> Thanks a lot.

By inspecting the API I've realized that first argument must be an 
instance/object of the class:

  rb_raise(VALUE exception_object, const char* format_string, ...)

So I must use "rb_class_new_instance", am I right?



-- 
Iaki Baz Castillo <ibc / aliax.net>