我遇到了一些Ruby代码,
我试着理解为什么变量在initialize
方法的声明中的名称末尾有冒号。
结肠是否有任何原因?
attr_reader :var1, :var2
def initialize(var1:, var2:)
@var1 = var1
@var2 = var2
end
答案 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)