Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 创建一个ruby方法,该方法接受散列参数并将它们添加到我的方法';s散列_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 创建一个ruby方法,该方法接受散列参数并将它们添加到我的方法';s散列

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

嘿,伙计们。如何将{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

不过,您需要合并/更新收到的哈希以将其全部合并在一起。

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}