你可能知道,Ruby 有一个速记运算符&
这让我们可以轻松地转换Symbol
to a Proc
。例子:
%w(a b c).map(&:upcase) #=> ["A", "B", "C"]
相当于:
%w(a b c).map { |c| c.upcase } #=> ["A", "B", "C"]
解释是&:upcase
正在打电话to_proc
on :upcase
创建一个Proc
object.
因此,这几乎解释了运算符用作方法的最后一个参数时的作用。
但是,看起来不可能在方法调用的参数之外的任何地方使用该运算符:
:upcase.to_proc => #<Proc:0x007febbc85ab38(&:upcase)>
&:upcase => SyntaxError: syntax error, unexpected &
像这样使用会很好:
case number
when &:even?
# ...
when &:prime?
# ...
end
这虽然有效:
case number
when :even?.to_proc
# ...
when :prime?.to_proc
# ...
end
简而言之,一元运算符&
只能在方法的参数中使用,例如arr.map(&:upcase)
。这是什么原因呢?