mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #5820 from FnControlRuby/nil
Implement `nil.to_c` and `nil.to_r`
This commit is contained in:
@@ -74,3 +74,9 @@ class Complex < Numeric
|
||||
end
|
||||
undef i
|
||||
end
|
||||
|
||||
class Numeric
|
||||
def to_c
|
||||
Complex(self, 0)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -381,6 +381,12 @@ complex_hash(mrb_state *mrb, mrb_value cpx)
|
||||
return mrb_int_value(mrb, hash);
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
nil_to_c(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
return complex_new(mrb, 0, 0);
|
||||
}
|
||||
|
||||
void mrb_mruby_complex_gem_init(mrb_state *mrb)
|
||||
{
|
||||
struct RClass *comp;
|
||||
@@ -404,6 +410,7 @@ void mrb_mruby_complex_gem_init(mrb_state *mrb)
|
||||
mrb_define_method(mrb, comp, "quo", complex_div, MRB_ARGS_REQ(1));
|
||||
mrb_define_method(mrb, comp, "==", complex_eq, MRB_ARGS_REQ(1));
|
||||
mrb_define_method(mrb, comp, "hash", complex_hash, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, mrb->nil_class, "to_c", nil_to_c, MRB_ARGS_NONE());
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -347,12 +347,26 @@ rational_negative_p(mrb_state *mrb, mrb_value self)
|
||||
return mrb_false_value();
|
||||
}
|
||||
|
||||
#ifndef MRB_NO_FLOAT
|
||||
static mrb_value
|
||||
float_to_r(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
return rational_new_f(mrb, mrb_float(self));
|
||||
}
|
||||
#endif
|
||||
|
||||
static mrb_value
|
||||
fix_to_r(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
return rational_new(mrb, mrb_integer(self), 1);
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
nil_to_r(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
return rational_new(mrb, 0, 1);
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
rational_m(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
@@ -776,7 +790,11 @@ void mrb_mruby_rational_gem_init(mrb_state *mrb)
|
||||
mrb_define_method(mrb, rat, "quo", rational_div, MRB_ARGS_REQ(1));
|
||||
mrb_define_method(mrb, rat, "**", rational_pow, MRB_ARGS_REQ(1));
|
||||
mrb_define_method(mrb, rat, "hash", rational_hash, MRB_ARGS_NONE());
|
||||
#ifndef MRB_NO_FLOAT
|
||||
mrb_define_method(mrb, mrb->float_class, "to_r", float_to_r, MRB_ARGS_NONE());
|
||||
#endif
|
||||
mrb_define_method(mrb, mrb->integer_class, "to_r", fix_to_r, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, mrb->nil_class, "to_r", nil_to_r, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, mrb->kernel_module, "Rational", rational_m, MRB_ARGS_ARG(1,1));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user