我已经创建了一个对象调用Proc.new
并传递给它的块作为参数Proc`对象:混淆`Call`为`block`创建为`
a = Proc.new{|x| x = x*10; puts(x)}
#=> #<Proc:[email protected](irb):3>
a.call(10)
#100
#=> nil
a.call(10,20)
#100
#=> nil
a.call(10,20,40)
#100
#=> nil
我没有使用任何splat operator(*)
也。但是,如何阻止参数x
能够忽略额外的参数?
当我们这样做时,我们会得到一个明确的错误,但为什么块参数不是这样?
def show(x)
print "X::#{x}"
end
#=> nil
show(10)
#X::10#=> nil
show(10,20)
#ArgumentError: wrong number of arguments (2 for 1)
# from (irb):6:in `show'
# from (irb):10
# from C:/Ruby193/bin/irb:12:in `<main>'
不要忘了lambda是一个Proc。 ''lambda {} .class => Proc'' – Intrepidd 2013-03-11 14:52:27
确实,但它们的表现都不同:) – 2013-03-11 15:03:36