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

Kam*_*i81 7 ruby

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

例如,

contacts.sort_by(&:first_name).
Run Code Online (Sandbox Code Playgroud)

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

Ali*_*kau 8

&在方法调用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 次

最近记录:

13 年,9 月 前