跳至内容

默认参数值和命名参数

默认参数值

方法可以为最后几个参数指定默认值

class Person
  def become_older(by = 1)
    @age += by
  end
end

john = Person.new "John"
john.age # => 0

john.become_older
john.age # => 1

john.become_older 2
john.age # => 3

命名参数

除了位置之外,所有参数也可以通过其名称来指定。例如

john.become_older by: 5

当有多个参数时,调用中的名称顺序无关紧要,只要所有必需参数都已覆盖即可

def some_method(x, y = 1, z = 2, w = 3)
  # do something...
end

some_method 10                   # x: 10, y: 1, z: 2, w: 3
some_method 10, z: 10            # x: 10, y: 1, z: 10, w: 3
some_method 10, w: 1, y: 2, z: 3 # x: 10, y: 2, z: 3, w: 1
some_method y: 10, x: 20         # x: 20, y: 10, z: 2, w: 3

some_method y: 10 # Error, missing argument: x

当方法指定散点参数(下一节解释)时,不能对位置参数使用命名参数。原因是理解参数匹配的方式变得非常困难;在这种情况下,位置参数更容易推理。