如果在yaml文件中未声明从yaml文件读取的变量,如何引发异常?

时间:2014-11-04 21:23:26

标签: ruby yaml

我正在从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块中的代码。

最红宝石的做法是什么?

1 个答案:

答案 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" }