以下是Ruby语法中`&`符号的含义是什么?

4
在下面的Ruby示例中,&代表什么?它是否类似于循环中的+=
payments.sum(&:price)

感谢您,Rich。

可能是重复问题:在Ruby中,map(&:name)是什么意思? - Andrew Grimm
4个回答

3

&:price是“在集合的每个成员上使用#price方法”的速记方式。

当一元"&"作为参数传递到方法中时,告诉Ruby“将其转换为Proc”。符号上的#to_proc方法会将该符号#send到接收对象,该对象通过该名称调用相应的方法。


1
具体来说,它相当于 payments.sum { |payment| payment.price } - Sophie Alpert
请纠正我,但是&:都与“对于集合中的每个成员”无关。这是sum方法的一个属性。 - jalf

1
不,这与+=无关。当在方法调用中使用一元的&运算符时,会将给定的Proc对象转换为块。如果操作数不是Proc(例如在此处它是一个符号),则首先对其调用to_proc,然后将生成的Proc对象转换为块。

1

谢谢,你回答中的第二篇文章非常有用。 - kim3er

-1

我不是Ruby的专家,但据我所知,它与C / C ++中的意义基本相同,即为地址运算符。换句话说,方法 price 本身作为参数传递给 sum ,而不是调用 price 并将结果传递给 sum


这是一个令人惊讶的好猜测,但并不完全正确。mattt的答案是正确的。 - Sophie Alpert
从用户的角度来看,它的结果非常相似,但在底层方面并不完全正确。对于熟悉C或C ++的人来说,这是一个合理的“意义模型”。 - jalf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接