Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more
Integer
is the basis for the two concrete classes that hold
whole numbers, Bignum
and Fixnum
.
Convert obj
to an Integer.
static VALUE rb_int_induced_from(klass, x) VALUE klass, x; { switch (TYPE(x)) { case T_FIXNUM: case T_BIGNUM: return x; case T_FLOAT: return rb_funcall(x, id_to_i, 0); default: rb_raise(rb_eTypeError, "failed to convert %s into Integer", rb_obj_classname(x)); } }
As int is already an Integer
, all these methods
simply return the receiver.
static VALUE int_to_i(num) VALUE num; { return num; }
Returns a string containing the ASCII character represented by the receiver's value.
65.chr #=> "A" ?a.chr #=> "a" 230.chr #=> "\346"
static VALUE int_chr(num) VALUE num; { char c; long i = NUM2LONG(num); if (i < 0 || 0xff < i) rb_raise(rb_eRangeError, "%ld out of char range", i); c = i; return rb_str_new(&c, 1); }
Iterates block, passing decreasing values from int down to and including limit.
5.downto(1) { |n| print n, ".. " } print " Liftoff!\n"
produces:
5.. 4.. 3.. 2.. 1.. Liftoff!
static VALUE int_downto(from, to) VALUE from, to; { RETURN_ENUMERATOR(from, 1, &to); if (FIXNUM_P(from) && FIXNUM_P(to)) { long i, end; end = FIX2LONG(to); for (i=FIX2LONG(from); i >= end; i--) { rb_yield(LONG2FIX(i)); } } else { VALUE i = from, c; while (!(c = rb_funcall(i, '<', 1, to))) { rb_yield(i); i = rb_funcall(i, '-', 1, INT2FIX(1)); } if (NIL_P(c)) rb_cmperr(i, to); } return from; }
Returns true
if int is an even number.
static VALUE int_even_p(VALUE num) { if (rb_funcall(num, '%', 1, INT2FIX(2)) == INT2FIX(0)) { return Qtrue; } return Qfalse; }
As int is already an Integer
, all these methods
simply return the receiver.
static VALUE int_to_i(num) VALUE num; { return num; }
Always returns true
.
static VALUE int_int_p(num) VALUE num; { return Qtrue; }
Returns the Integer
equal to int + 1.
1.next #=> 2 (-1).next #=> 0
static VALUE int_succ(num) VALUE num; { if (FIXNUM_P(num)) { long i = FIX2LONG(num) + 1; return LONG2NUM(i); } return rb_funcall(num, '+', 1, INT2FIX(1)); }
Returns true
if int is an odd number.
static VALUE int_odd_p(VALUE num) { if (rb_funcall(num, '%', 1, INT2FIX(2)) != INT2FIX(0)) { return Qtrue; } return Qfalse; }
Returns the int itself.
?a.ord #=> 97
This method is intended for compatibility to character constant in Ruby 1.9. For example, ?a.ord returns 97 both in 1.8 and 1.9.
static VALUE int_ord(num) VALUE num; { return num; }
Returns the Integer
equal to int - 1.
1.pred #=> 0 (-1).pred #=> -2
static VALUE int_pred(VALUE num) { if (FIXNUM_P(num)) { long i = FIX2LONG(num) - 1; return LONG2NUM(i); } return rb_funcall(num, '-', 1, INT2FIX(1)); }
As int is already an Integer
, all these methods
simply return the receiver.
static VALUE int_to_i(num) VALUE num; { return num; }
Returns the Integer
equal to int + 1.
1.next #=> 2 (-1).next #=> 0
static VALUE int_succ(num) VALUE num; { if (FIXNUM_P(num)) { long i = FIX2LONG(num) + 1; return LONG2NUM(i); } return rb_funcall(num, '+', 1, INT2FIX(1)); }
Iterates block int times, passing in values from zero to int - 1.
5.times do |i| print i, " " end
produces:
0 1 2 3 4
static VALUE int_dotimes(num) VALUE num; { RETURN_ENUMERATOR(num, 0, 0); if (FIXNUM_P(num)) { long i, end; end = FIX2LONG(num); for (i=0; i<end; i++) { rb_yield(LONG2FIX(i)); } } else { VALUE i = INT2FIX(0); for (;;) { if (!RTEST(rb_funcall(i, '<', 1, num))) break; rb_yield(i); i = rb_funcall(i, '+', 1, INT2FIX(1)); } } return num; }
As int is already an Integer
, all these methods
simply return the receiver.
static VALUE int_to_i(num) VALUE num; { return num; }
As int is already an Integer
, all these methods
simply return the receiver.
static VALUE int_to_i(num) VALUE num; { return num; }
As int is already an Integer
, all these methods
simply return the receiver.
static VALUE int_to_i(num) VALUE num; { return num; }
Iterates block, passing in integer values from int up to and including limit.
5.upto(10) { |i| print i, " " }
produces:
5 6 7 8 9 10
static VALUE int_upto(from, to) VALUE from, to; { RETURN_ENUMERATOR(from, 1, &to); if (FIXNUM_P(from) && FIXNUM_P(to)) { long i, end; end = FIX2LONG(to); for (i = FIX2LONG(from); i <= end; i++) { rb_yield(LONG2FIX(i)); } } else { VALUE i = from, c; while (!(c = rb_funcall(i, '>', 1, to))) { rb_yield(i); i = rb_funcall(i, '+', 1, INT2FIX(1)); } if (NIL_P(c)) rb_cmperr(i, to); } return from; }