这如何创建一个proc对象?

时间:2016-11-20 17:24:19

标签: ruby

def makeProc(&obj)
  obj
end

puts makeProc{|x,y| x+y}.class

当块作为参考传递给它时,obj如何成为Proc类型?有什么理由还是像某种红宝石魔法?

1 个答案:

答案 0 :(得分:1)

参数列表中的&&符号一元前缀sigil表示所谓的"块参数"。它基本上意味着类似于"将块参数包装在适当的Proc对象中并将其绑定到此参数名称"。

请记住:块应该在语法和语义上都是轻量级的,并且它们实现这一点的一种方式是它们不是对象而且不能被命名。结果是你只能用块做三件事:

  1. 忽略他们
  2. yield给他们
  3. 检查块是否通过(使用block_given?
  4. 那就是它。如果你想做除此之外的任何事情,你需要a)一个对象和b)一个名称,这是&&符号一元前缀sigil所做的。

    参数列表中,&&符号一元前缀运算符执行相反的操作:它将Proc对象展开到块中(或者,如果对象不是Proc已经发送to_proc消息,将其转换为Proc