例如,
contacts.sort_by(&:first_name).
Run Code Online (Sandbox Code Playgroud)
我理解这是做什么的,但我不明白&:符号,这意味着什么,它是一个符号(:)与块(&)?我在哪里可以阅读更多相关信息?
当&在方法调用PROC对象之前使用时,它将该PROC,如果它是该调用以下一个普通的块.
如果&之前其他类型的对象(符号用:first_name在方法调用你的情况),它试图调用to_proc这个对象上,如果它不具有to_proc方法,你会得到TypeError.
一般&:first_name是一样的&:first_name.to_proc.
Symbol#to_proc返回一个Proc对象,它通过sym响应给定的方法.
:first_name.to_proc 将返回如下所示的Proc:
proc { |obj, *args, &block| obj.first_name(*args, &block) }
Run Code Online (Sandbox Code Playgroud)
此Proc调用由对象上的原始符号指定的方法作为第一个参数传递,并将所有其余参数+块作为此方法参数传递.
还有一个例子:
> p = :each.to_proc
=> #<Proc:0x00000001bc28b0>
> p.call([1,2,3]) { |item| puts item+1 }
2
3
4
=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |