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; { 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; }
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)); }
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; { 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; { 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; }