如何为退出的哈希分配键值对?我有以下代码,我想将一些键值对附加到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开始,这是这个特定解析问题引发的异常。