红宝石代码:为什么在冒号前面加上冒号(在初始化方法内部)

Fre*_*dyK 5 ruby

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

结肠有什么原因吗?

attr_reader :var1, :var2

def initialize(var1:, var2:)
   @var1 = var1
   @var2 = var2
end
Run Code Online (Sandbox Code Playgroud)

Urs*_*sus 5

这些是关键字参数。

您可以按名称而不是按位置使用它们。例如

ThatClass.new(var1: 42, var2: "foo")
Run Code Online (Sandbox Code Playgroud)

要么

ThatClass.new(var2: "foo", var1: 42)
Run Code Online (Sandbox Code Playgroud)

Thoughtbot撰写的有关关键字参数的文章


And*_*eko 5

它称为关键字参数

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

def add_values(first: 1, second: 2)
  first + second
end
Run Code Online (Sandbox Code Playgroud)

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

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}
Run Code Online (Sandbox Code Playgroud)

当调用带有关键字参数的方法时,参数可以按任何顺序出现。如果调用方发送了未知的关键字参数,则会引发ArgumentError。

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