Sunday, October 26, 2008

(4)方法的缺省参数

在Ruby中方法的参数是可以有缺省值的,比如下面的方法中len的值是缺省值,也就是说如果你调用这个方法时,没有给他传值那么就用缺省值:
def prefix(s, len=1)
  s[0,len]
end


prefix("Ruby", 3)    # => "Rub"
prefix("Ruby")       # => "R"
而且,方法的缺省参数可以是任意的表达式,甚至可以是对前一个参数的计算值,比如:
# 第二个参数的缺省值是通过第一个参数的长度值计算得到的。
def suffix(s, index=s.size-1)
  s[index, s.size-index]
end
需要记住的是,方法的缺省值是在方法被调用的时候创建的,而不是给他传值的时候,比如下面的方法中,缺省参数a是在调用方法append的时候就创建了:
def append(x, a=[])
  a << x
end
在Ruby1.8中方法的缺省参数只能出现在其它非缺省参数的后面,在Ruby1.9中没有这个限制,不过,你不能在两个缺省参数中放一个非缺省参数,而且在调用方法时,参数的传递必须是按顺序的。比如你有一个方法有2个参数,他们都存在缺省值,你可以不给它传递参数从而全部使用缺省值,你也可以只传递一个参数,那么方法会对第二个参数使用缺省值,但是,遗憾的是我们没办法只给第二个参数传值而让第一个参数使用缺省值。因为方法的参数传递是按顺序的。

No comments: