Sunday, October 26, 2008

(7)方法的块参数

前面我们提到了有一种参数以&开头,这就是块参数,比如下面的代码中doubleplus有一个参数&b,它是一个块参数,块参数通过call方法调用执行:
def doubleplus(x,y,&b)
  c=x+y  
  while (c>1)
    b.call(2*c) #块参数通过call执行块中的内容
    c=c-1
  end
end
doubleplus(4,2){|c|
  puts "c:is #{c}" #我们在这里调用这个方法,并给他传递一个块参数
}
在随后的章节中我们会降到Proc对象,如果是Proc对象的话参数的&符号就可以省略了,因为这是时他是一个对象:
def doubleplus(x,y,b)
  c=x+y  
  while (c>1)
    b.call(2*c)#Proc对象的call方法
    c=c-1
  end
end
b=Proc.new{|x| puts x} #声明一个Proc对象变量
doubleplus(4,2,b)

No comments: