2017-12-27 43 views
1

이 두 구 차이 란 차이점이 무엇인지 파악할 수 없으며 (첫 번째 문자가 더 많은 문자를 입력하는 것을 제외하고는) 차이가 무엇인지 알 수 없습니다.레일 :</p> <p><code>ENV.fetch("MY_VAR")</code></p> <p><code>ENV['MY_VAR']</code></p> <p>I 5 사용을 레일을 이들 두 버전 검색된 : ENV.fetch() 및 ENV 차이는 []

+0

질문이 확실하지 않습니다. * * 구문 *에 대해 명시 적으로 묻지 만 구문을 전혀 설명하지 않고 * 의미에 대해서만 설명하는 대답을 수락했습니다. –

+0

@ JörgWMittag 질문을 할 때 모두가 사전을 참고하는 것은 아니며, 다른 사람들이 무엇을 요구하는지는 분명합니다. 영어 명령을 표시해야하는 경우 자신의 대답을 제공 할 수 있습니다. –

답변

9

해시 유사 객체는 일반 Ruby이며 Rails의 일부는 아닙니다. fine ENV#[] manual :

환경 변수 name의 값을 문자열로 검색합니다. 명명 된 변수가없는 경우 nil을 반환합니다.

fine ENV#fetch manual :

환경 변수 name를 얻어 온다.

주어진 이름이없고 default도 아니고 제공된 블록 a도 IndexError가 발생하지 않은 경우 블록이 주어지면 값을 제공하기 위해 누락 된 이름으로 호출됩니다. 기본값이 주어지면 블록을 지정하지 않으면 반환됩니다.

그러니 그냥 Hash#[]Hash#fetch 같은, 유일한 차이점은 fetch 당신이 키가 발견되지 않은 경우 (동작을 지정 fetch에 전달되는 fetch에 전달 디폴트 값, 기본 블록을 사용하거나 예외를 발생시킬 수 있다는 것입니다) [] 키를 찾을 수없는 경우 그냥 자동으로 nil 준다. 특정 경우

:

ENV.fetch("MY_VAR") 
ENV['MY_VAR'] 

의 차이가 더 MY_VAR 환경 변수 없지만 ENV.fetch('MY_VAR')는 예외가 발생한다면 ENV['MY_VAR'] 당신에게 nil을 줄 것입니다.

+0

이 답변은'ENV :: fetch'와'ENV :: []'의 * semantics *에 대해 설명합니다. 그러나 질문은 명시 적으로 * 구문 *에 대해 질문합니다. –