各变量优先级
- 各变量优先级主要对比如下 :
def arg_demo(a, b, c = 1, *d, e, f)
Arguments | variable_name | Priority |
---|---|---|
Required arguments | a , b | ☆☆☆☆ |
Required arguments | e , f | ☆☆☆ |
Default values for arguments | c | ☆☆ |
Optional arguments | d | ☆ |
- 必须要求被提供的变量(Required arguments)一定要提供,不然会报错:
这里是提供了一个两个参数的方法,调用时却只给了一个参数的错误信息:
ArgumentError: wrong number of arguments (given 1, expected 2)
- 已经被提前赋值的变量( Default values for arguments ),在提供的变量充足时就会被覆盖;
- 星号标起*的可选变量(Optional arguments)永远是最后被满足的,左边右边的变量(Required arguments)需求都被满足后才轮到可选变量;
具体实例代码以及运行输出
Required arguments
# 一一对应
def m(a,b,c)
puts "a = #{a} ,b = #{b} ,c = #{c} "
end
m(1,2,3)
# a = 1 ,b = 2 ,c = 3
Optional arguments
# 可选参数,数量零个或者多个
def m(*a)
puts "a = #{a}"
end
m(1,2,3)
#a = [1, 2, 3]
Default values for arguments
# 提前赋好值的参数
def m(a=1)
puts "a = #{a}"
end
# 如果直接调用,就使用提前赋好的值
m
# a = 1
# 如果有变量传递,那么就被覆盖
m(2)
# a = 2
Required arguments / Optional arguments / Default values for arguments
# 优先满足Required arguments
def m(a,*b)
puts "a = #{a} ,b = #{b} "
end
m(1)
# a = 1 ,b = []
# 优先满足 Required arguments
def m(a,b=1)
puts "a = #{a} ,b = #{b} "
end
# 满足Required arguments
m(2)
# a = 2 ,b = 1
# 满足 Required arguments之后,再满足Default values for arguments 而且被覆盖了
m(2,3)
# a = 2 ,b = 3
# 满足Default values for arguments
def m(a=1,*b)
puts "a = #{a} ,b = #{b} "
end
# 使用默认值
m
# a = 1 ,b = []
# 默认值被覆盖
m(2)
# a = 2 ,b = []
def m(a,b=2,*c)
puts "a = #{a} ,b = #{b} ,c = #{c} "
end
m(1)
# a = 1 ,b = 2 ,c = []
m(1,3)
# a = 1 ,b = 3 ,c = []
m(1,3,5,7)
# a = 1 ,b = 3 ,c = [5, 7]
def m(a,b=2,*c,d)
puts "a = #{a} ,b = #{b} ,c = #{c} ,d = #{d} "
end
m(1,3)
# a = 1 ,b = 2 ,c = [] ,d = 3
m(1,3,5)
# a = 1 ,b = 3 ,c = [] ,d = 5
m(1,3,5,7)
# a = 1 ,b = 3 ,c = [5] ,d = 7
m(1,3,5,7,9)
# a = 1 ,b = 3 ,c = [5, 7] ,d = 9
reference
《The Well-Grounded Rubyist, Second Edition》
(https://www.manning.com/books/the-well-grounded-rubyist-second-edition)
2.4. A close look at method arguments
┌――――――┐
|Now Bokkiing|
| ∩_∩ |
| (;´∀) 、|
| 人 Y/ |
| ( uし |
| (_)_) |
└――――――┘
http://emoji.vis.ne.jp/shibaraku_omachikudasai.htm