【发布时间】:2016-11-03 10:55:46
【问题描述】:
我遇到了一些 Ruby 代码,
我试图理解为什么变量在 initialize 方法的声明中的名称末尾有冒号。
冒号有什么原因吗?
attr_reader :var1, :var2
def initialize(var1:, var2:)
@var1 = var1
@var2 = var2
end
【问题讨论】:
标签: ruby
我遇到了一些 Ruby 代码,
我试图理解为什么变量在 initialize 方法的声明中的名称末尾有冒号。
冒号有什么原因吗?
attr_reader :var1, :var2
def initialize(var1:, var2:)
@var1 = var1
@var2 = var2
end
【问题讨论】:
标签: ruby
这些是关键字参数。
您可以按名称而不是位置来使用它们。例如
ThatClass.new(var1: 42, var2: "foo")
或
ThatClass.new(var2: "foo", var1: 42)
【讨论】:
它被称为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。
当混合关键字参数和位置参数时,所有位置参数 参数必须出现在任何关键字参数之前。
【讨论】: