Ruby - 具名参数
Varsion
1
2
3
4
5
def func(a:,b:)
puts a,b
end

func(a:1,b:2)

在方法定义中,有两个以冒号结尾的参数。而在调用的时候,却更像是使用哈希。

Ruby的匹配规则会使得a和b的绑定值与期望的一致,而不需要去研究是怎么转化成哈希的。

同时,通过具名参数给其一个默认值们可以将关键字参数作为可选的,这样就会是参数列表看起来更像哈希。

1
def func(a:1,b:2)

如果调用函数时没有传递该参数值,则会使用其默认值。

而如果采用另外一种方式,调用一个使用具名参数的方法时,传递给方法的值并没有声明过。

这时候,有一个参数变量可以吸收所有未声明的变量参数。

1
2
3
4
5
def func(a:1,b:2,**c)
puts a,b,c
end

func(x:1,y:2,Z:3)

如果没有可以吸收的参数,类似于func(x:1,y:2)的方法调用仅仅是随着哈希传递,这有可能失败,也有可能不会,最终取决于方法所需要的参数。

当然,也可以合并具名参数和非具名参数。

1
2
3
4
def func(x,y,*z,a:1,b:,**c,&block)
puts x,y,z,a,b,c
end
func(1,2,3,4,5,b:10,p:20,q:30)

对该方法的说明:

  • 带有两个必选的定位参数x,y
  • 拥有一个’吸收’参数z用以处理跟随在定位参数后额外的参数(这里吸收了3,4,5
  • 拥有一个可选和一个必选参数(a是默认的1,b是绑定的10
  • 拥有一个’吸收’参数c用于吸收未知的具名参数(p和q哈希)
  • 拥有一个变量用于绑定代码块,仅当代码块(block)存在时

  • Post title:Ruby - 具名参数
  • Post author:Varsion
  • Create time:2020-09-16 15:12:05
  • Post link:https://blog.varsion.cn/post/6d98def4.html
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments