ruby代码:为什么把冒号放在变量名前面(在initialize方法里面)

时间:2016-11-03 10:55:47

标签: ruby

我遇到了一些Ruby代码, 我试着理解为什么变量在initialize方法的声明中的名称末尾有冒号。

结肠是否有任何原因?

attr_reader :var1, :var2

def initialize(var1:, var2:)
   @var1 = var1
   @var2 = var2
end

2 个答案:

答案 0 :(得分:5)

它被称为keyword arguments

  

关键字参数类似于默认的位置参数   值:

def add_values(first: 1, second: 2)
  first + second
end
     

**将接受任意关键字参数:

def gather_arguments(first: nil, **rest)
  p first, rest
end


gather_arguments first: 1, second: 2, third: 3
# prints 1 then {:second=>2, :third=>3}
     

当使用关键字参数调用方法时,可能会出现参数   以任何顺序。如果调用者发送了一个未知的关键字参数   引发了ArgumentError。

     

混合关键字参数和位置参数时,所有位置   参数必须出现在任何关键字参数之前。

答案 1 :(得分:4)

这些是关键字参数。

您可以按名称使用它们而不是位置。 E.g。

ThatClass.new(var1: 42, var2: "foo")

ThatClass.new(var2: "foo", var1: 42)

An article about keyword arguments by thoughtbot