Ruby-将键值哈希对分配给现有变量



如何为退出的哈希分配键值对?我有以下代码,我想将一些键值对附加到result变量中。

def extra_variables
result = ansible_vars_from_objects(@handle.object, {})
result = ansible_vars_from_options(result)
@handle.log(:info, "Extra vars is:  #{result}")
ansible_vars_from_ws_values(result)
end

以下是结果变量的日志输出:

[----] I, [2022-03-08T21:31:41.701307 #322:2acf0cb72fb8]  INFO -- automation: Q-task_id([r345_miq_provision_1235]) <AEMethod launch_ansible_job> Extra vars is:  {"ansible_ssh_user"=>"ubuntu"}

使用Hash#merge!方法

有一个内置的方法可以将一个哈希对象合并到另一个哈希中:Hash#merge!。主要的警告是Hash对象必须具有唯一的键,所以如果您试图合并具有相同顶级键的对象,请记住这一点,因为插入顺序中的最后一个键获胜。

例如:

hash = {a: 1, b:2}
other_hash = {c: 3}
hash.merge! other_hash
hash
#=> {:a=>1, :b=>2, :c=>3}

合并哈希文字时注意分析问题

还要注意,如果您试图合并哈希文字,则需要将哈希括在括号中,这样解释器就不会认为您试图传递块。例如,您需要使用:

hash.merge!({d: 4})

为了避免Ruby认为CCD_ 3是传递给#merge!的块!,但据我所知,在任何当前支持的Ruby中,当使用变量作为#merge!的参数时,这都不是问题!。然而,如果你遇到这样的异常,需要记住:

语法错误,意外的":",应为"}"(SyntaxError(

这是非常没有信息的,但从Ruby 3.1.1开始,这是这个特定解析问题引发的异常。

最新更新