我正在学习 ruby 并且对其中的编码相当陌生。下面是我为合并两个哈希并写入 YAML 文件而编写的厨师食谱。
yaml_string = "AVG_METRICS:
get_requests:
- OneMinuteRate
- FifteenMinuteRate"
trimmed_custom_hash = YAML.load(yaml_string)
ruby_block do
merger = proc do |key,v1,v2|
Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2
end
block do
if test_string.start_with? "7."
default_hash = YAML.load_file(File.join('/opt/tests/metrics','metrics_test.yml'))
default_hash.merge!(trimmed_custom_hash, &merger)
File.open("/opt/tests/metrics/metrics_test.yml", "w") { |file| file.write(default_hash.to_yaml)}
end
end
end
我无法理解为什么会发生隐式转换错误。在考虑它可能失败的可能性时,我提出了一些问题。
- 这个块的返回值是多少?
- 如果 if 条件有“?”,那么该块应该只返回真还是假?
- 在 chef 中使用 ruby_block 时有什么需要记住的吗?
我一直试图弄清楚这一点。如果您能指出错误可能在哪里,那就太好了。谢谢!