Ruby参数赋值研究

非常特别。

看代码

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),有*可变参数,则赋值给可变参数。

你可能感兴趣的:(Ruby参数赋值研究)