2009-05-20 6 views
22

JavaScript에는 특정 시점에서 정의 된 적이없는 변수를 테스트하는 유용한 방법이 있습니다. 변수 가 정의되지 않은 경우 예를 들어, 다음 코드 조각은 진정한를 반환합니다Ruby에서 정의되지 않은 변수를 테스트하는 JavaScript?

typeof(bob)=='undefined' 

가 어떻게 루비에서 동일한 테스트를 수행 할 수 있습니까?

편집 : 자연스럽고 컴팩트 한 테스트를 찾고 있습니다. 예외와 같은 것을 사용하는 어색한 근사값을 생각해 냈습니다 만, 그다지 예쁜 것은 아닙니다!

답변

43
defined?(variable_name) 

irb(main):004:0> defined?(foo) 
=> nil 
irb(main):005:0> foo = 1 
=> 1 
irb(main):006:0> defined?(foo) 
=> "local-variable" 

여기에 좋은 write up이 있습니다.

+0

헤헤. 정의 된 것은 흥미 does_not_exist 구조 나가서 설명하자면 NameError "정의되지 않은" 끝 –

+0

을 시작 = 시험 : 내가 좋아하는 물건을했다? blah는 nil이 아닌 false를 반환하고 정의 된 경우 유형 문자열을 반환합니다. –

+0

object.instance_variable_defined? (: var_name)과 같은 다른 옵션이 있습니다. 문서에서 정의 된 항목을 검색 하시겠습니까? 보다 구체적인 버전을 찾을 수 있습니다. – jshen

8

defined?은 항목이 정의되지 않은 경우 nil을 반환하는 함수입니다.

defined? somevar 
=> nil 
somevar = 12 
defined? somevar 
=> "local-variable" 

그래서 :

if defined?(somevar) 
    do_something 
end 
3

염두에 두어야 정의 된? 변수가 정의되면 문자열을 반환하고 그렇지 않으면 nil을 반환하므로 결과에 조건부 검사를 사용합니다. 나는 구문이 그것이 부울을 반환한다고 암시한다고 생각한다.

+0

'nil'은 false이고 모든 문자열은 사실이므로 , 모든 흐름 제어 목적 (if, elsif, unless, while, until 등)에 대해 boolean과 같은 반환 값을 처리 할 수 ​​있습니다. – rampion

-1

이렇게 테스트 할 수도 있습니다.

if somevar.nil 
     # not set do something 
    else 
     # is set do something else 
    end 
+0

Nope. "nil"과 "undefined"는 두 가지 다른 것을 의미합니다. 이 정의 된 경우에는 정의 된 경우 –

+0

? (variable_to_test) == 닐 둔다 ""= 최종 => variable_to_test가 variable_to_test 정의되지 "variable_to_test 정의되는"다른 둔다 "variable_to_test은 정의되지?"(variable_to_test) = = 풋 전무 => variable_to_test가 정의 끝을 "variable_to_test 정의된다"다른 풋 "variable_to_test은 정의되지 않는다" 이 좀 더 간단한 방법이 될한다고처럼 보인다? – Greg

+0

죄송합니다. 올바른 서식을 사용하여 다시 게시하려고 시도했지만 실패했습니다. 후에 – Greg

0

모든 사용 사례 : 그렇게 쉬울 것이다 알려진 것

defined? ur_variable 
=> nil 

ur_variable= 12 
defined? ur_variable 
=> "local-variable" 

another_variable = nil 
defined? another_variable 
=> "local-variable" 
관련 문제