def makeProc(&obj)
obj
end
puts makeProc{|x,y| x+y}.class
当块作为参考传递给它时,obj如何成为Proc类型?有什么理由还是像某种红宝石魔法?
答案 0 :(得分:1)
参数列表中的&
&符号一元前缀sigil表示所谓的"块参数"。它基本上意味着类似于"将块参数包装在适当的Proc
对象中并将其绑定到此参数名称"。
请记住:块应该在语法和语义上都是轻量级的,并且它们实现这一点的一种方式是它们不是对象而且不能被命名。结果是你只能用块做三件事:
yield
给他们block_given?
)那就是它。如果你想做除此之外的任何事情,你需要a)一个对象和b)一个名称,这是&
&符号一元前缀sigil所做的。
在参数列表中,&
&符号一元前缀运算符执行相反的操作:它将Proc
对象展开到块中(或者,如果对象不是Proc
已经发送to_proc
消息,将其转换为Proc
。