ruby参数的星号(*与**)

浏览:2357 发布日期:2018-11-27 01:52:20

ruby参数的星号(*与**)

以下这个例子,只有一个星号,

def test1(*, b)
    puts "输出#{b}"
end

test(3, 4, 5) => b = 5,*号参数表示接受一个变长参数,
它会保证b参数,获取一个值,其他全归*这个参数所有。

**双星号参数表示一个可选的hash,它只能是最后一个参数,

class A
  def initialize(*, b, **x)
    puts "输出#{b}"
    p x
  end

end

class B < A
  def initialize(a, b, x2: 44, **x)
    super
  end
end

a = A.new(3, 5, 7, 8, cc: 88)

b = B.new(4, 5, acc: 88)