ruby方法定义中关键字参数哈希上的splat运算符
我有一门课是这样的:ruby方法定义中关键字参数哈希上的splat运算符,ruby,ruby-2.5,Ruby,Ruby 2.5,我有一门课是这样的: class AwesomeService attr_reader :a, :b def initialize(a: 30, b: 40) @a = a @b = b end end class AwesomeService DEFAULTS = { a: 30, b: 40 } attr_reader *DEFAULTS.keys def initialize(**DEFAULTS) @a = a
class AwesomeService
attr_reader :a, :b
def initialize(a: 30, b: 40)
@a = a
@b = b
end
end
class AwesomeService
DEFAULTS = {
a: 30,
b: 40
}
attr_reader *DEFAULTS.keys
def initialize(**DEFAULTS)
@a = a
@b = b
end
end
我正在尝试这样做:
class AwesomeService
attr_reader :a, :b
def initialize(a: 30, b: 40)
@a = a
@b = b
end
end
class AwesomeService
DEFAULTS = {
a: 30,
b: 40
}
attr_reader *DEFAULTS.keys
def initialize(**DEFAULTS)
@a = a
@b = b
end
end
这样我就可以在一个单独的散列中保留默认值
但我得到了一个错误:
SyntaxError ((irb): syntax error, unexpected tCONSTANT, expecting ')')
def initialize(**DEFAULTS)
^~~~~~~~
初始化中的splat操作符似乎没有像我预期的那样工作。但这似乎是合乎逻辑的做法。我做错了什么?是的。。。那不是你能做的事
**foo
在参数列表中是如何收集kwargs散列的,所以不能同时也是如何注入一个
更重要的是,kwargs的要点是它们将散列分解为局部变量——如果它在运行时扩展散列,则无法工作
最接近的可能是:
def initialize(**values)
values = DEFAULTS.merge(values)
raise "..." unless (values.keys - DEFAULTS.keys).empty?
@a = values[:a]
@b = values[:b]
end
嗯,这很有道理。我省略了代码的raise部分,因为我不介意有人将不存在的键传递给该方法。