[Ruby笔记]12.Ruby 方法参数变量优先级method(*arg)

本文探讨了Ruby中方法参数的优先级,包括必需参数、可选参数、默认值参数和星号参数(*d)。必需参数必须提供,否则会引发错误。默认值参数在提供充足变量时会被覆盖。星号参数总是最后被满足,确保所有其他参数需求得到满足后再接收剩余参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各变量优先级

  • 各变量优先级主要对比如下 :

def arg_demo(a, b, c = 1, *d, e, f)

Argumentsvariable_namePriority
Required argumentsa , b☆☆☆☆
Required argumentse , f☆☆☆
Default values for argumentsc☆☆
Optional argumentsd
  • 必须要求被提供的变量(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值