可能重复:
What does map(&:name) mean in Ruby?
Ruby/Ruby on Rails ampersand colon shortcut
例如,
contacts.sort_by(&:first_name).
我理解这是做什么的,但我不理解&amp ;:符号,这是什么意思,它是一个符号(:)带有一个块(&)?我在哪里可以阅读更多相关信息?
答案 0 :(得分:8)
在方法调用中在Proc对象之前使用&
时,它会将Proc视为调用后的普通块。
当&
在方法调用中使用其他类型的对象(在您的情况下为符号:first_name
)之前,它会尝试在此对象上调用to_proc,如果它没有to_proc方法,您将获得{{1} }。
通常TypeError
与&:first_name
相同。
Symbol#to_proc返回一个Proc对象,该对象通过sym。
响应给定的方法
&:first_name.to_proc
将返回如下所示的Proc:
:first_name.to_proc
此Proc调用对象上原始符号指定的方法作为第一个参数传递,并将所有其余参数+块作为此方法参数传递。
又一个例子:
proc { |obj, *args, &block| obj.first_name(*args, &block) }
答案 1 :(得分:3)
与contacts.sort_by {|o| o.first_name}
它返回一个Proc对象,它通过sym响应给定的方法。