有人可以解释Ruby中的(:+)是什么吗?

时间:2014-10-29 20:24:48

标签: ruby

有人可以解释Ruby中的(:+)是什么吗?我试过谷歌搜索它&寻找参考指南,无法找到任何东西。谢谢,对不起,我对Ruby&编程。

2 个答案:

答案 0 :(得分:3)

字符序列*之前的冒号:Symbol字面值。这适用于:+Symbol,内容为“+”。

符号可用于在某些上下文中引用具有相同名称的方法,并且在几个地方,您的示例:+可以是对+运算符的引用,这实际上只是一个具有相同名称的方法。 Ruby支持语法在表达式中看到普通+时调用它,或者在某些核心方法中它将转换:+

作为示例,您可以使用:+作为简写来创建Array整数的总和:

[1,2,3,4].inject( :+ )
 => 10

这是有效的,因为Ruby特别使用Array#inject中的运算符(实际在Enumberable#inject中定义,Array从该模块获取)。

像这样的符号的更通用的用例是send方法:

2.send( :+, 2 )
=> 4

虽然2.send( "+", 2 )也很好用。这样使用时可能看起来很奇怪,而不仅仅是2 + 2,但如果您想要更加动态地选择运算符,它可能会很方便。


* Symbol字面值允许或不允许的语法规则有点神秘。它们使您能够在可能的情况下编写更短的文字,但Ruby必须避免使用一些含糊不清的语法,例如Symbol的{​​{1}}或中间的空格。这是允许的,只要你生成这样的.,就必须添加引号。 Symbol

答案 1 :(得分:2)

Ruby会告诉你

:+.class
# Symbol

(:+)是括号中的符号。

相关问题