forked from mruby/mruby
-
Notifications
You must be signed in to change notification settings - Fork 0
mrb_get_args
cremno edited this page Sep 11, 2013
·
2 revisions
| Declaration | Definition |
|---|---|
| mruby.h | class.c |
int mrb_get_args(mrb_state *mrb, const char *format, ...);Retrieves arguments from a mrb_state.
-
mrb: mruby VM state
-
format: pointer to a null-terminated string.
The following format specifiers are available:
| Character | Explanation | Argument type |
|---|---|---|
| o | Object | mrb_value* |
| S | String | mrb_value* |
| A | Array | mrb_value* |
| H | Hash | mrb_value* |
| s | char array (may include null byte!), length |
char**, int*
|
| z | null-terminated char array | char** |
| a | Array (elements, length) |
mrb_value**, mrb_int*
|
| f | Float | mrb_float* |
| i | Integer | mrb_int* |
| b | boolean | mrb_bool* |
| n | Symbol | mrb_sym* |
| & | block | mrb_value* |
-
| rest (arguments, count) | ```mrb_value*```, ```int*```
Format specifiers after | are optional.
- ...: receiving arguments
number of parsed arguments (greater than or equal to 0)
#include <mruby.h>
#include <mruby/compile.h>
static mrb_value
test_method(mrb_state *mrb, mrb_value self)
{
mrb_value o;
mrb_int i = 38250574;
int n = mrb_get_args(mrb, "o|i", &o, &i);
mrb_p(mrb, o);
mrb_p(mrb, mrb_fixnum_value(i));
mrb_p(mrb, mrb_fixnum_value(n));
return mrb_nil_value();
}
int
main(void)
{
const char code[] =
"test('Second argument is optional. Print default value and number of parsed arguments: ')\n" \
"test('Second argument is optional. Print 123 and number of parsed arguments:', 123)";
mrb_state *mrb = mrb_open();
mrb_define_method(mrb, mrb->kernel_module, "test", test_method, MRB_ARGS_ARG(1, 1));
mrb_gc_arena_restore(mrb, 0);
mrb_load_string(mrb, code);
mrb_close(mrb);
return 0;
}Output:
"Second argument is optional. Print default value and parsed arguments: "
38250574
1
"Second argument is optional. Print 123 and parsed arguments:"
123
2