我遇到了一些Ruby代码,我试图理解为什么变量的名称在initialize方法的声明中以冒号结尾。
结肠有什么原因吗?
attr_reader :var1, :var2
def initialize(var1:, var2:)
@var1 = var1
@var2 = var2
end
Run Code Online (Sandbox Code Playgroud)
这些是关键字参数。
您可以按名称而不是按位置使用它们。例如
ThatClass.new(var1: 42, var2: "foo")
Run Code Online (Sandbox Code Playgroud)
要么
ThatClass.new(var2: "foo", var1: 42)
Run Code Online (Sandbox Code Playgroud)
它称为关键字参数。
关键字参数类似于具有默认值的位置参数:
Run Code Online (Sandbox Code Playgroud)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}当调用带有关键字参数的方法时,参数可以按任何顺序出现。如果调用方发送了未知的关键字参数,则会引发ArgumentError。
在混合关键字参数和位置参数时,所有位置参数必须出现在任何关键字参数之前。