2011-05-10 68 views
4

在下面的例子红宝石,什么是&代表什么?它是否沿着循环中的+=在下面的ruby语法中`&`是什么意思?

payments.sum(&:price) 

感谢,

丰富

+0

[Ruby中有什么映射(&:name)的含义?](http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby) – 2011-05-10 23:15:46

回答

3

&结果:价格是“使用#price方法的每一个成员上速记的集合“。

一元“&”,当作为参数成方法传递告诉红宝石“借此,使之成为一个Proc”。符号上的#to_proc方法将#将该符号发送给接收对象,该对象通过该名称调用相应的方法。

+1

具体而言,它等同于'payments.sum {| payment | payment.price}'。 – 2011-05-10 15:12:59

+0

纠正我,如果我错了,但'&'或':'与'集合的每个成员'都没有任何关系。这是'sum'方法的一个属性。 – jalf 2011-05-10 15:16:18

+0

谢谢,那正是我以前的样子。 – kim3er 2011-05-10 15:43:24

-1

我绝对不是一个Ruby专家,但我记得,它的意思是一样,因为它会在C/C++,它在哪里的地址 - 的运营商。换句话说,该方法price本身作为参数来传递sum,而不是price被调用,并且被传递到sum

+0

这是一个令人惊讶的很好的猜测,但它不是很正确。 mattt的回答是对的。 – 2011-05-10 15:11:57

+0

不完全正确的内涵,但从用户的角度来看,结果非常相似。对于熟悉C或C++的人来说,这是一个合理的“意味着什么”的心智模型。 – jalf 2011-05-10 15:13:45

1

不,它无关+=。一元运算符&用于方法调用时,将给定的Proc对象转换为块。如果操作数不是一个Proc(在这种情况下它是一个符号),首先调用to_proc,然后生成的Proc对象变成一个块。

1

“如果方法的最后一个参数前面带有一个&符号,Ruby会假定它是一个Proc对象,它将它从参数列表中移除,将Proc对象转换为块,并将其与方法关联。 “

Programming Ruby: The Pragmatic Programmers' Guide

了解更多关于它in this article

+0

谢谢,您的答案中的第二篇文章非常有用。 – kim3er 2011-05-10 15:43:59