【问题标题】:Ruby push a hash into an array with out curly bracesRuby 将散列推入不带花括号的数组中
【发布时间】:2017-01-24 08:24:18
【问题描述】:

我正在尝试创建一个用于函数调用的参数列表。

函数调用如下所示:

render json: @flight, meta: {url: Flight.encrypt(@flight.id.to_s)}

我尝试了以下方法:

params = [key1: value1] 
params.push(key2: value2)

希望使用 splat 运算符 (*) 来填充参数列表。但是,params 如下所示:

[{key1: value1},{key2: value2}]

任何帮助将不胜感激。

编辑

我更新了示例代码以添加更多上下文。

函数调用如下所示:

render json: some_json_value, meta: {some_key:  some_value}

我尝试了以下方法:

params = [json: @some_json_value] 
params.push(meta: {some_key:  some_value})

希望使用 splat 运算符 (*) 来填充参数列表。但是,params 如下所示:

[{json: @some_json_value},{meta: {some_key:  some_value}}]

任何帮助将不胜感激。

【问题讨论】:

  • 你可以包含desired in/output,在这种情况下你想要执行的代码(我怀疑render *params)。会让你的问题更清楚(对我来说)。

标签: arrays ruby append splat


【解决方案1】:

您的方法需要一个散列(不是散列数组)。因此,您必须使用哈希来构建您的参数:

parameters = { :key1 => value1 }
parameters[:key2] = value2

somefunction parameters

【讨论】:

  • 谢谢。我试过了,但参数的结果是{key1: value1, key2: value2}。我需要key1: value1, key2: value2
  • @user2517182: "key1: value1, key2: value2" 不是一个对象。您需要学习区分某些事物的简化语法和该语法将产生的实际事物。根据您的方法的实现方式,它接受一个哈希或关键字参数。您可以使用哈希来调用这两个变体。
  • @user2517182:看到你的编辑,这个答案正是你所需要的。你甚至没有尝试过。
  • 这就是我的想法。我已经做过很多次了。但是,当我使用 {key1: value1, key2: value2} 调用渲染函数时,出现语法错误syntax error, unexpected ':', expecting '}'
  • @SergioTulentsev 我确实尝试过。这就是我编写编辑的原因。
【解决方案2】:

首先想到的是:

[{key1: value1},{key2: value2}].inject(:merge)
#=> {key1: value1, key2: value2}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 2017-05-01
    • 2015-01-21
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多