2014-11-04 4 views
0

I 독서하고 변수 : 변수가 vm.yaml 파일에 설정되지 않으면, 변수가 제 (예컨대 puts $var_a시)에 액세스 할 때까지yaml 파일에서 읽은 변수가 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 

, 에러가 검출되지 않을 것이다.

yaml 파일에 변수가 설정되어 있지 않으면 rescue 블록의 코드를 실행하고 싶습니다.

이것을 수행하는 데 가장 루비 스트 한 방법은 무엇입니까?

답변

3

해시 데이터에 액세스하려면 [] 대신 가져 오기를 사용하십시오.

그래서 대신 settings['var_a']는 키가 존재하지 않는 경우 settings.fetch('var_a')

는 기본적으로이 오류를 올릴 것이다 않습니다. 그러나 fetch 메소드는 키가 발견되지 않으면 실행되는 선택적 블록을 사용합니다. 감사 -

settings.fetch('var_a') { fail "Key var_a was not found, please add it to the yaml" }

+1

@DaneAnderson : settings.fetch('var_a') { 'foo' }

하거나 사용자 지정 오류 메시지를 작성 :

이는 기본 반환 값을 설정할 수 있습니다! 중첩 된 요소를 어떻게 가져 옵니까? 예 : 'var_a_a = settings [ 'var_a'] [ 'a']' –

+1

yaml 파일로부터 데이터를 읽어 들이면 중첩 된 해시로 작업 할 가능성이 높습니다. 두뇌는 처음에는 주위를 두들겨 감싸기가 힘들지만 그 중심에는'settings.fetch ('var_a') 메소드에 대한 응답이 해시이므로 [ ] 또는 fetch를 사용하여 반환 된 해시 값을 가져 와서'settings.fetch ('var_a'). fetch ('a')' –

관련 문제