/* * call-seq: * num.coerce(numeric) => array * * If <i>aNumeric</i> is the same type as <i>num</i>, returns an array * containing <i>aNumeric</i> and <i>num</i>. Otherwise, returns an * array with both <i>aNumeric</i> and <i>num</i> represented as * <code>Float</code> objects. This coercion mechanism is used by * Ruby to handle mixed-type numeric operations: it is intended to * find a compatible common type between the two operands of the operator. * * 1.coerce(2.5) #=> [2.5, 1.0] * 1.2.coerce(3) #=> [3.0, 1.2] * 1.coerce(2) #=> [2, 1] */ static VALUE num_coerce(x, y) VALUE x, y; { if (CLASS_OF(x) == CLASS_OF(y)) return rb_assoc_new(y, x); x = rb_Float(x); y = rb_Float(y); return rb_assoc_new(y, x); }