Ruby on rails 创建一个ruby方法,该方法接受散列参数并将它们添加到我的方法';s散列
嘿,伙计们。如何将{c:3}对添加到方法的哈希中,而不替换所有哈希?我希望在我的方法中接收选项={a:1,b:2,c:3}。如果您希望能够覆盖选项,可以使用方法:Ruby on rails 创建一个ruby方法,该方法接受散列参数并将它们添加到我的方法';s散列,ruby-on-rails,ruby,Ruby On Rails,Ruby,嘿,伙计们。如何将{c:3}对添加到方法的哈希中,而不替换所有哈希?我希望在我的方法中接收选项={a:1,b:2,c:3}。如果您希望能够覆盖选项,可以使用方法: def n(options={a: 1, b: 2}) ... end n(c: 3) 或者,自Ruby 2.0以来,您可以使用双splat运算符参数捕获所有未指定的方法参数: def n(options = {}) opts = options.reverse_merge(a: 1, b: 2) # ... end
def n(options={a: 1, b: 2})
...
end
n(c: 3)
或者,自Ruby 2.0以来,您可以使用双splat运算符参数捕获所有未指定的方法参数:
def n(options = {})
opts = options.reverse_merge(a: 1, b: 2)
# ...
end
不过,您需要合并/更新收到的哈希以将其全部合并在一起。
Hash\35; reverse\u merge代码>应该是唯一的方法!不幸的是,||=
方法覆盖了nil和false值,因此不安全。我建议使用options=options.reverse\u merge…
而不是options.reverse\u merge代码>作为一般做法。对于bang方法,如果对父作用域中的选项散列调用该方法,则该散列将作为副作用进行修改。
def n(options = {})
opts = options.reverse_merge(a: 1, b: 2)
# ...
end
def n(options={a: 1, b: 2}, **extra)
...
end
n(c: 3) # options={a: 1, b: 2}, extra = {c: 3}
n(options={a:11, b: 99}, c: 123) # options={a: 11, b: 99}, extra = {c: 123}