Ruby中的参数类型

在ruby中定义方法时,传入参数的方式是非常灵活的.

传入的参数可以分为以下种类型:

  1. 必选的参数 required arguments
def method(a, b)
end

这样当你调用该方法时必须同时传入两个方法

method("allen", 25")
  1. 带有默认值的参数

def method(a, b, c=100)
end

调用:

method('allen', 'age', 50)      #=> 调用时传入c参数      a是"allen",  b是"age", c是50
method('allen', 'age')  #=> 调用时不传入c参数参数      a是"allen",  b是"age", c是默认值100
  1. 可选的参数,如果你想在运行的时候再决定要传的参数类型和数量,那要在参数前面加上一个特殊的星号(*).
 def method(*p)
 end

这样你在调用方法的时候可以传入任何数量和类型的参数,包括none.

  method
  method(25)
  method('tom', 'age', 25)

以上三种调用方式都是合法的,如果调用method时不传入参数,p表示一个空数组。如果传入多个参数,那么参数的值就是包含这些参数的数组。

  def method(*p)
     p
  end
  method(1,2,'hello')   #=> [1,2,'hello']
  1. 多种参数配合使用:

上面介绍了三种参数,那么如何混合使用这些参数呢?

首先尝试下最简单的混合方式,必选参数 + 可选参数

  def mix_method(a, b, *p)
    #[a,b,p]
  end

<p>比较容易理解,调用方式可以用以下两种:

  mix_method(1,2)     #参数对应值 a =>1, b => 2, p => []
  mix_method(1,2, 3)   #参数对应值 a =>1, b => 2, p => [3]

现在我们定义一个参数复杂些的方法,包含无规则顺序的必选和可选参数

  def mix_method(a, b, *p, q)
    #[a,b,p,q]
  end

我们调用这个方法时可以传入3或者3个以上的参数,这种情况下必选参数会优先被指定,如果还有剩余的值会以数组的形式指定给可选参数

  mix_method(1,2,3)   # a => 1,  b=>2, p => [], q => 3
  mix_method(1,2,3,4) # a => 1,  b=>2, p => [3], q => 4
  mix_method(1,2,3,4,5) # a => 1,  b=>2, p => [3, 4], q => 4

包含必选,可选和默认值的参数

  def  mix_method(a, b, c=100,*p, q)
    #  [a,b,c,p,q]
  end

同样该方法可以传入3个和3个以上的参数

  mix_method(1,2,3)   # a => 1,  b=>2,  c => 100, p => [], q => 3
  mix_method(1,2,3,4) # a => 1,  b=>2,  c => 3, p => [], q => 4
  mix_method(1,2,3,4, 5) # a => 1,  b=>2,  c => 3, p => [4], q => 5
  mix_method(1,2,3,4,5,6) # a => 1,  b=>2,  c => 3, p => [4,5], q => 6
  1. 通过上面的几个例子证明了ruby中定义方法参数的灵活性,但是定义方法时有一个准则必须遵守,那就是可选参数不能定义在带有默认值的参数之前,如:
  def mix_method(a, b = 5, *p)   #正确
  def mix_method(a, *p, b = 5)   #错误,会报一个语法错误
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容