programing

Ruby : ENV 변수가 있으면 가장 간결하게 사용하고 그렇지 않으면 기본값을 사용합니다.

goodcopy 2021. 1. 17. 11:54
반응형

Ruby : ENV 변수가 있으면 가장 간결하게 사용하고 그렇지 않으면 기본값을 사용합니다.


Ruby에서는 변수가 설정되어 있으면 사용하는 줄을 작성하려고합니다. 그렇지 않으면 기본값으로 설정합니다.

myvar = # assign it to ENV['MY_VAR'], otherwise assign it to 'foobar'

이 코드를 다음과 같이 작성할 수 있습니다.

if ENV['MY_VAR'].is_set? #whatever the function is to check if has been set
  myvar = ENV['MY_VAR']
else
  myvar = 'foobar'
end

그러나 이것은 다소 장황하고 가능한 가장 간결한 방식으로 작성하려고 노력하고 있습니다. 어떻게 할 수 있습니까?


myvar = ENV['MY_VAR'] || 'foobar'

NB 이것은 약간 부정확합니다 (해시가 값을 포함 할 수있는 경우 nil). 그러나 ENV문자열 만 포함하기 때문에 아마도 충분할 것입니다.


일반적인 해시의 가장 신뢰할 수있는 방법은 키가 있는지 묻는 것입니다.

myvar = h.has_key?('MY_VAR') ? h['MY_VAR'] : 'default'

당신이 걱정하지 않는 경우 nil또는 false값은, 다음의 접근 방식 undur_gongor 좋은 것입니다 (시이 또한 잘해야한다 (즉 당신이 "거기"로 그들에게 동일하게 취급 할) h입니다 ENV) :

myvar = h['MY_VAR'] || 'foobar'

그리고 nil해시에있는 것을 허용하고 싶지만 거기에없는 척 (즉, nil값이 "없음"과 동일 함)하고 false해시에 a를 허용하는 경우 :

myvar = h['MY_VAR'].nil? ? 'foobar' : h['MY_VAR']

결국 그것은 당신의 정확한 의도에 달려 있으며 당신의 의도와 일치하는 접근 방식을 선택해야합니다. if/else/end사이의 선택 ? :은 물론 취향의 문제이고 "간결하다"는 "최소 문자 수"를 의미하지는 않으므로 if원하는대로 삼항 또는 블록을 자유롭게 사용하십시오 .


hash.fetch(key) { default_value }

값이 있으면 반환 default_value하고 키가 없으면 반환 합니다.


변수가 아닌 해시 키에 대해 실제로 묻기 때문에 제공 한 특정 예제와 관련이 없지만 Ruby는 변수 정의를 확인하는 방법을 제공합니다. 다음과 같이 defined?키워드를 사용합니다 (메서드가 아니라 인터프리터의 특수 처리가 필요하므로 키워드).

a = 1
defined? a
  #=> "local-variable"

@a = 2
defined? @a
  #=> "instance-variable"

@@a = 3
defined? @@a
  #=> "class-variable"

defined? blahblahblah
  #=> nil

따라서 다음을 수행 할 수 있습니다.

var = defined?(var) ? var : "default value here"

내가 아는 한, 그것은 NameError 위험을 감수하지 않고 묻는 방식으로 변수를 정의 하는 추악한 begin/ rescue/ end블록 이외의 유일한 방법 입니다. 내가 말했듯이 이것은 다음과 같이 해시에 적용되지 않습니다.

hash = {?a => 2, ?b => 3}
defined? hash[?c]
  #=> "method"

[], 액세스에 사용하는 키 / 값 쌍이 아니라 메서드 가 정의되어 있는지 확인하고 있습니다.


myvar = ENV.fetch('MY_VAR') { 'foobar' }

'foobar'ENV['MY_VAR']이 설정되지 않은 경우 기본값 입니다.


ENV [ 'MY_VAR']가 거짓 값으로 판명 되더라도 작동하는 또 다른 가능한 대안

myvar  = ENV['MY_VAR'].presence || 'foobar'

수요 내가 쓴 보석이 매우 간결하고 건조 할 수 있습니다 :

myvar = demand(ENV['MY_VAR'], 'foobar')

ENV['MY_VAR']존재하는 경우에만 사용 됩니다. 즉, nil, 비어 있거나 공백 전용 문자열 인 경우에만 삭제하고 대신 기본값을 제공합니다.

에 대한 유효한 값 ENV['MY_VAR']이 거짓 (예 :) false이거나 잘못된 값이 진실 (예 :)이면 using과 같은 ""솔루션 ||이 작동하지 않습니다.


myvar = ENV['MY_VAR'].is_set? ? ENV['MY_VAR'] : 'foobar'

이렇게하면 .is_set을 유지할 수 있습니까? 방법.

참조 URL : https://stackoverflow.com/questions/7666252/ruby-most-concise-way-to-use-an-env-variable-if-it-exists-otherwise-use-defaul

반응형