+
是一种方法。
5 + 3 #=> 8
5.+(3) #=> 8
有人可以告诉我+
的方法定义吗?
答案 0 :(得分:4)
以下是Integer#+
的2.5.0版本:
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, '+');
}
在文档中通常很容易找到它:
https://ruby-doc.org/core-2.5.0/Integer.html#method-i-2B
请紧记JörgW Mittag指出的内容-有许多+
方法,例如,+
文字返回的内容定义的方法4.4
会有所不同,因为它们是{{ 1}},而不是Float
。
您可能还已经注意到它是C,而不是Ruby。这是因为Ruby解释器MRI是用C编写的,因此,难怪该语言的核心功能(如Integer
类及其方法)也是用C编写的。
答案 1 :(得分:2)
仅供参考,有一个gem在shell中提供了Ruby的文档/源代码:pry-doc
它是pry(另一个红宝石外壳)的插件
这非常有用,每天对我都有帮助。我真的建议将其用于任何红宝石项目。
您的案例非常特殊,让我很头疼,试图获取+
方法的源代码。我了解到,在寻找运算符(+
,-
,==
,<<
,...)源代码或文档时,您必须放置{{1} }放在运算符前面。
示例
.
以下是如何在您的情况下使用它
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
答案 2 :(得分:1)
Here is the implementation in Opal:
def +(other) %x{ if (other.$$is_number) { return self + other; } else { return #{__coerced__ :+, other}; } } end
您可能已经注意到,它是带有嵌入式ECMAScript的Ruby,而后者又嵌入了Ruby。 Opal是ECMAScript平台的编译器,因此出于性能原因,一些低层方法在ECMAScript中部分实现。