什么&:在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响应给定的方法。