Просто для вашей информации есть гем, который предоставляет документацию / исходный код для Ruby в оболочке: pry-doc
Это плагин для pry (еще одна рубиновая оболочка)
Это очень полезно и помогает мне каждый день.Я действительно рекомендую это для любого проекта ruby.
Ваш случай довольно специфичен и вызвал головную боль при попытке получить источник метода +
.Я узнал, что при поиске исходного кода или документации оператора (+
, -
, ==
, <<
, ...) вы должны поставить .
перед оператором.
Пример
pry(main)> ? [].==
From: array.c (C Method):
Owner: Array
Visibility: public
Signature: ==(arg1)
Number of lines: 7
Equality --- Two arrays are equal if they contain the same number of elements and if each element is equal to (according to Object#==) the corresponding element in other_ary.
[ "a", "c" ] == [ "a", "c", 7 ] #=> false
Ниже описано, как использовать его в вашем случае
[1] pry(main)> x = 5
=> 5
[2] pry(main)> show-source x.+
From: numeric.c (C Method):
Owner: Integer
Visibility: public
Number of lines: 11
VALUE
rb_int_plus(VALUE x, VALUE y)
{
if (FIXNUM_P(x)) {
return fix_plus(x, y);
}
else if (RB_TYPE_P(x, T_BIGNUM)) {
return rb_big_plus(x, y);
}
return rb_num_coerce_bin(x, y, '+');
}
[3] pry(main)> x = 5.0
=> 5.0
[4] pry(main)> $ x.+
From: numeric.c (C Method):
Owner: Float
Visibility: public
Number of lines: 16
static VALUE
flo_plus(VALUE x, VALUE y)
{
if (RB_TYPE_P(y, T_FIXNUM)) {
return DBL2NUM(RFLOAT_VALUE(x) + (double)FIX2LONG(y));
}
else if (RB_TYPE_P(y, T_BIGNUM)) {
return DBL2NUM(RFLOAT_VALUE(x) + rb_big2dbl(y));
}
else if (RB_TYPE_P(y, T_FLOAT)) {
return DBL2NUM(RFLOAT_VALUE(x) + RFLOAT_VALUE(y));
}
else {
return rb_num_coerce_bin(x, y, '+');
}
}