在下面的Ruby示例中,
感谢您,Rich。
&
代表什么?它是否类似于循环中的+=
?payments.sum(&:price)
感谢您,Rich。
&:price是“在集合的每个成员上使用#price方法”的速记方式。
当一元"&"作为参数传递到方法中时,告诉Ruby“将其转换为Proc”。符号上的#to_proc方法会将该符号#send到接收对象,该对象通过该名称调用相应的方法。
payments.sum { |payment| payment.price }
。 - Sophie Alpert&
和:
都与“对于集合中的每个成员”无关。这是sum
方法的一个属性。 - jalf+=
无关。当在方法调用中使用一元的&
运算符时,会将给定的Proc对象转换为块。如果操作数不是Proc(例如在此处它是一个符号),则首先对其调用to_proc
,然后将生成的Proc对象转换为块。如果一个方法的最后一个参数前面有一个&符号,Ruby会认为它是一个Proc对象。它会将其从参数列表中删除,将Proc对象转换为块,并将其与该方法关联。
来自《Programming Ruby: The Pragmatic Programmers' Guide》。
在本文中了解更多信息。
我不是Ruby的专家,但据我所知,它与C / C ++中的意义基本相同,即为地址运算符。换句话说,方法 price
本身作为参数传递给 sum ,而不是调用
price 并将结果传递给
sum
。