有人可以解释Ruby中的(:+)是什么吗?我试过谷歌搜索它&寻找参考指南,无法找到任何东西。谢谢,对不起,我对Ruby&编程。
答案 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
(:+)
是括号中的符号。