我正在从yaml文件中读取变量:
begin
settings = YAML.load_file 'vm.yaml'
$var_a = settings['var_a']
$var_b = settings['var_b']
....
$var_z = settings['var_z']
rescue
puts "\nInvalid vm.yaml - please create or recreate vm.yaml from vm.yaml.example\n\n"
exit 1
end
puts $var_a
如果未在vm.yaml文件中设置变量,则在首次访问变量之前(例如puts $var_a
)将无法检测到错误。
最好,如果没有在yaml文件中设置变量,我希望执行rescue块中的代码。
最红宝石的做法是什么?
答案 0 :(得分:3)
使用fetch而不是[]来访问哈希数据。
而不是settings['var_a']
做settings.fetch('var_a')
默认情况下,如果密钥不存在,则会引发错误。但是,如果找不到密钥,则fetch方法还会采用可执行的块。
这可以让您设置默认的返回值:
settings.fetch('var_a') { 'foo' }
或创建自定义失败消息:
settings.fetch('var_a') { fail "Key var_a was not found, please add it to the yaml" }