什么&:在ruby中意味着什么?它是一个与符号混合的块?

可能重复:
map(&:name)在Ruby中意味着什么?
Ruby / Ruby on Rails&符号冒号快捷方式

例如,

contacts.sort_by(&:first_name). 

我理解这是做什么的,但是我不明白&:符号,这意味着什么,它是一个带有块(&)的符号(:)? 我在哪里可以阅读更多相关信息?

在方法调用中在Proc对象之前使用时,它会将Proc视为调用后的普通块。
在方法调用中在其他类型的对象(符号:first_name )之前&之前使用时,它会尝试在此对象上调用to_proc,如果它没有to_proc方法,则会获得TypeError

通常&:first_name相同。

Symbol#to_proc返回一个Proc对象,它通过sym响应给定的方法。

:first_name.to_proc将返回如下所示的Proc:

 proc { |obj, *args, &block| obj.first_name(*args, &block) } 

此Proc调用由对象上的原始符号指定的方法作为第一个参数传递,并将所有其余参数+块作为此方法参数传递。

还有一个例子:

 > p = :each.to_proc => # > p.call([1,2,3]) { |item| puts item+1 } 2 3 4 => [1, 2, 3] 

contacts.sort_by {|o| o.first_name} contacts.sort_by {|o| o.first_name}

它返回一个Proc对象,它通过sym响应给定的方法。