Sunday, October 26, 2008

(5)任意参数的方法

有么有想过你的方法可以接受任意参数,如果你是Java程序员你一定记得那个main方法,它的参数是一个字符串数组,所以它的参数是可以有多个的。在Ruby中也是这样的,不过你要在参数前加一个星号*,这样就告诉Ruby你的方法有任意个数的参数,其实这个参数还是一个数组:
def max(first, *rest)  
  max = first 
  rest.each {|x| max = x if x > max } 
  max
end
上面这个方法中*rest是一个数组参数,你可以传递任意数量的参数给他。在Ruby1.8中要求这个带星号的参数必须位于所有参数(缺省参数和带&的参数)之后,也就是说它是最后一个参数。Ruby1.9中没有这样的要求,它不必是方法的最后一个参数,但是它必须位于缺省参数和&前缀的参数之后。
调用这个方法:
data = [3, 2, 1]
m = max(*data)   # first = 3, rest=[2,1] => 3
如果没有这个*那么方法的计算结果可就不同了:
m = max(data)   # first = [3,2,1], rest=[] => [3,2,1]

No comments: