非常特别。
看代码
def fm a,b=2,c
puts "a:"+a.to_s
puts "b:"+b.to_s
puts "c:"+c.to_s
end
def fm2(a,b=2,c=3,d)
puts "a:"+a.to_s
puts "b:"+b.to_s
puts "c:"+c.to_s
puts "d:"+d.to_s
end
def fm3 *e
end
fm 1,3 #输出1,2,3 正确。也是最少的参数调用。
fm 1,4,3 #就是输出1,4,3
fm2 1,2,3 #输出1,2,3,3(比普通参数个数多一个参数,所以给左边的带默认值的参数,剩下的默认参数使用默认值[第一步],然后其他参数从左到右进行对应[第二步])
fm2 4,3,2,1 #输出4,3,2,1
先计算个数,后赋值,这是其“智能”的匹配方法。
如果所给实参少于普通形参个数,会有异常。刚好则只赋值给普通参数。带缺省值参数使用缺省值。
如果所给实参个数m多于普通形参个数o,但是少于普通参数个数与带缺省值参数个数d之和:
则缺少的个数也就是o+d-m,从右边计算o+d-m,这些无法覆盖的带缺省值的参数使用缺省值,其他的从左到右进行覆盖。
如果超过总个数(m>o+d),有*可变参数,则赋值给可变参数。