In Files

  • numeric.c

Integer

Integer is the basis for the two concrete classes that hold whole numbers, Bignum and Fixnum.

Public Class Methods

induced_from(obj) => fixnum, bignum click to toggle source

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

Public Instance Methods

ceil => int click to toggle source

As int is already an Integer, all these methods simply return the receiver.

 
               static VALUE
int_to_i(num)
    VALUE num;
{
    return num;
}
            
chr => string click to toggle source

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);
}
            
downto(limit) {|i| block } => int click to toggle source

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;
}
            
floor => int click to toggle source

As int is already an Integer, all these methods simply return the receiver.

 
               static VALUE
int_to_i(num)
    VALUE num;
{
    return num;
}
            
integer? → true click to toggle source

Always returns true.

 
               static VALUE
int_int_p(num)
    VALUE num;
{
    return Qtrue;
}
            
next => integer click to toggle source

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));
}
            
round => int click to toggle source

As int is already an Integer, all these methods simply return the receiver.

 
               static VALUE
int_to_i(num)
    VALUE num;
{
    return num;
}
            
succ => integer click to toggle source

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));
}
            
times {|i| block } => int click to toggle source

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;
}
            
to_i => int click to toggle source
to_int => int

As int is already an Integer, all these methods simply return the receiver.

 
               static VALUE
int_to_i(num)
    VALUE num;
{
    return num;
}
            
to_int => int click to toggle source

As int is already an Integer, all these methods simply return the receiver.

 
               static VALUE
int_to_i(num)
    VALUE num;
{
    return num;
}
            
truncate => int click to toggle source

As int is already an Integer, all these methods simply return the receiver.

 
               static VALUE
int_to_i(num)
    VALUE num;
{
    return num;
}
            
upto(limit) {|i| block } => int click to toggle source

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

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus