Ruby 2.7.7p221 (2022-11-24 revision 168ec2b1e5ad0e4688e963d9de019557c78feed9)
Data Structures | Functions
Defining methods

There are some APIs to define a method from C. More...

Data Structures

struct  rb_scan_args_t
 

Functions

void rb_define_method_id (VALUE klass, ID mid, VALUE(*func)(ANYARGS), int argc)
 
void rb_define_method (VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
 
void rb_define_protected_method (VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
 
void rb_define_private_method (VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
 
void rb_undef_method (VALUE klass, const char *name)
 
void rb_undef_methods_from (VALUE klass, VALUE super)
 
void rb_define_singleton_method (VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
 Defines a singleton method for obj. More...
 
void rb_define_module_function (VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
 Defines a module function for module. More...
 
void rb_define_global_function (const char *name, VALUE(*func)(ANYARGS), int argc)
 Defines a global function. More...
 
void rb_define_alias (VALUE klass, const char *name1, const char *name2)
 Defines an alias of a method. More...
 
void rb_define_attr (VALUE klass, const char *name, int read, int write)
 Defines (a) public accessor method(s) for an attribute. More...
 
MJIT_FUNC_EXPORTED VALUE rb_keyword_error_new (const char *error, VALUE keys)
 
 NORETURN (static void rb_keyword_error(const char *error, VALUE keys))
 
 NORETURN (static void unknown_keyword_error(VALUE hash, const ID *table, int keywords))
 
VALUE rb_extract_keywords (VALUE *orighash)
 
int rb_get_kwargs (VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
 
int rb_scan_args (int argc, const VALUE *argv, const char *fmt,...)
 
int rb_scan_args_kw (int kw_flag, int argc, const VALUE *argv, const char *fmt,...)
 
int rb_class_has_methods (VALUE c)
 
int rb_block_given_p (void)
 Determines if the current method is given a block. More...
 
void rb_need_block (void)
 Declares that the current method needs a block. More...
 
ID rb_frame_this_func (void)
 The original name of the current method. More...
 
ID rb_frame_callee (void)
 The name of the current method. More...
 

Detailed Description

There are some APIs to define a method from C.

These API takes a C function as a method body.

Method body functions
Method body functions must return a VALUE and can be one of the following form:
Fixed number of parameters

This form is a normal C function, excepting it takes a receiver object as the first argument.

static VALUE my_method(VALUE self, VALUE x, VALUE y);
unsigned long VALUE
Definition: ruby.h:102
argc and argv style

This form takes three parameters: argc, argv and self. self is the receiver. argc is the number of arguments. argv is a pointer to an array of the arguments.

static VALUE my_method(int argc, VALUE *argv, VALUE self);
const VALUE * argv
Ruby array style

This form takes two parameters: self and args. self is the receiver. args is an Array object which contains the arguments.

static VALUE my_method(VALUE self, VALUE args);

Number of parameters
Method defining APIs takes the number of parameters which the method will takes. This number is called argc. argc can be:
zero or positive number
This means the method body function takes a fixed number of parameters
-1
This means the method body function is "argc and argv" style.
-2
This means the method body function is "self and args" style.

Function Documentation

◆ NORETURN() [1/2]

NORETURN ( static void   rb_keyword_errorconst char *error, VALUE keys)

◆ NORETURN() [2/2]

NORETURN ( static void   unknown_keyword_errorVALUE hash, const ID *table, int keywords)

◆ rb_block_given_p()

int rb_block_given_p ( void  )

Determines if the current method is given a block.

Return values
zeroif not given
non-zeroif given

Definition at line 898 of file eval.c.

Referenced by ossl_pem_passwd_cb(), rb_ary_delete(), rb_method_call(), rb_method_call_kw(), and rb_need_block().

◆ rb_class_has_methods()

int rb_class_has_methods ( VALUE  c)

Definition at line 2219 of file class.c.

References FALSE, rb_id_table_size(), RCLASS_M_TBL, and TRUE.

◆ rb_define_alias()

void rb_define_alias ( VALUE  klass,
const char name1,
const char name2 
)

Defines an alias of a method.

Parameters
klassthe class which the original method belongs to
name1a new name for the method
name2the original name of the method

Definition at line 1818 of file class.c.

References klass, rb_alias(), and rb_intern.

◆ rb_define_attr()

void rb_define_attr ( VALUE  klass,
const char name,
int  read,
int  write 
)

Defines (a) public accessor method(s) for an attribute.

Parameters
klassthe class which the attribute will belongs to
namename of the attribute
reada getter method for the attribute will be defined if read is non-zero.
writea setter method for the attribute will be defined if write is non-zero.

Definition at line 1831 of file class.c.

References FALSE, klass, name, rb_attr(), rb_intern, read(), and write().

◆ rb_define_global_function()

void rb_define_global_function ( const char name,
VALUE(*)(ANYARGS func,
int  argc 
)

Defines a global function.

Parameters
namename of the function
functhe method body
argcthe number of parameters, or -1 or -2. see Defining methods.

Definition at line 1805 of file class.c.

References argc, name, rb_define_module_function(), and rb_mKernel.

◆ rb_define_method()

void rb_define_method ( VALUE  klass,
const char name,
VALUE(*)(ANYARGS func,
int  argc 
)

Definition at line 1569 of file class.c.

References argc, klass, METHOD_VISI_PUBLIC, name, rb_add_method_cfunc(), and rb_intern.

Referenced by rb_define_singleton_method().

◆ rb_define_method_id()

void rb_define_method_id ( VALUE  klass,
ID  mid,
VALUE(*)(ANYARGS func,
int  argc 
)

Definition at line 1560 of file class.c.

References argc, klass, METHOD_VISI_PUBLIC, and rb_add_method_cfunc().

◆ rb_define_module_function()

void rb_define_module_function ( VALUE  module,
const char name,
VALUE(*)(ANYARGS func,
int  argc 
)

Defines a module function for module.

Parameters
modulean module or a class.
namename of the function
functhe method body
argcthe number of parameters, or -1 or -2. see Defining methods.

Definition at line 1789 of file class.c.

References argc, name, rb_define_private_method(), and rb_define_singleton_method().

Referenced by rb_define_global_function().

◆ rb_define_private_method()

void rb_define_private_method ( VALUE  klass,
const char name,
VALUE(*)(ANYARGS func,
int  argc 
)

Definition at line 1587 of file class.c.

References argc, klass, METHOD_VISI_PRIVATE, name, rb_add_method_cfunc(), and rb_intern.

Referenced by rb_define_module_function().

◆ rb_define_protected_method()

void rb_define_protected_method ( VALUE  klass,
const char name,
VALUE(*)(ANYARGS func,
int  argc 
)

Definition at line 1578 of file class.c.

References argc, klass, METHOD_VISI_PROTECTED, name, rb_add_method_cfunc(), and rb_intern.

◆ rb_define_singleton_method()

void rb_define_singleton_method ( VALUE  obj,
const char name,
VALUE(*)(ANYARGS func,
int  argc 
)

Defines a singleton method for obj.

Parameters
objan arbitrary object
namename of the singleton method
functhe method body
argcthe number of parameters, or -1 or -2. see Defining methods.

Definition at line 1773 of file class.c.

References rb_define_method().

Referenced by rb_define_module_function().

◆ rb_extract_keywords()

VALUE rb_extract_keywords ( VALUE orighash)

Definition at line 1886 of file class.c.

◆ rb_frame_callee()

ID rb_frame_callee ( void  )

The name of the current method.

The function returns the alias if an alias of the method is called. The function can also return 0 if it is not in a method. This case can happen in a toplevel of a source file, for example.

Returns
the ID of the name or 0.
See also
rb_frame_this_func

Definition at line 1200 of file eval.c.

Referenced by rb_insecure_operation(), and rb_secure().

◆ rb_frame_this_func()

ID rb_frame_this_func ( void  )

The original name of the current method.

The function returns the original name of the method even if an alias of the method is called. The function can also return 0 if it is not in a method. This case can happen in a toplevel of a source file, for example.

Returns
the ID of the name or 0
See also
rb_frame_callee

Definition at line 1183 of file eval.c.

Referenced by rb_notimplement().

◆ rb_get_kwargs()

int rb_get_kwargs ( VALUE  keyword_hash,
const ID table,
int  required,
int  optional,
VALUE values 
)

Definition at line 1904 of file class.c.

References extract_kwarg, i, ID2SYM, key, NIL_P, Qnil, rb_ary_push(), and rb_ary_tmp_new().

Referenced by rb_num_get_rounding_option(), and rb_opts_exception_p().

◆ rb_keyword_error_new()

MJIT_FUNC_EXPORTED VALUE rb_keyword_error_new ( const char error,
VALUE  keys 
)

◆ rb_need_block()

void rb_need_block ( void  )

Declares that the current method needs a block.

Raises a LocalJumpError if not given a block.

Definition at line 932 of file eval.c.

References Qnil, rb_block_given_p(), and rb_vm_localjump_error().

◆ rb_scan_args()

int rb_scan_args ( int  argc,
const VALUE argv,
const char fmt,
  ... 
)

Definition at line 2177 of file class.c.

References arg, error, and rb_scan_args_t::tmp_buffer.

◆ rb_scan_args_kw()

int rb_scan_args_kw ( int  kw_flag,
int  argc,
const VALUE argv,
const char fmt,
  ... 
)

Definition at line 2198 of file class.c.

References arg, error, rb_scan_args_t::tmp_buffer, and rb_scan_args_t::vargs.

◆ rb_undef_method()

void rb_undef_method ( VALUE  klass,
const char name 
)

◆ rb_undef_methods_from()

void rb_undef_methods_from ( VALUE  klass,
VALUE  super 
)

Definition at line 1607 of file class.c.

References rb_id_table_foreach(), and RCLASS_M_TBL.