2009-07-10 3 views
2

이전에는 Java로 많은 작업을 했었고 이제는 Ruby로 더 많은 작업을하고 있습니다. 내가 알 수없는 한 가지는 자바 "NullPointerException"에 해당하는 루비는 무엇입니까? 나는 함수를 입력 할 때 변수를 테스트하기를 원한다. 만약 그것들이 nil이라면이 예외 유형을 발생시키고 자한다. 이 유형의 예외를 발생시키는 특정 루비 오류 클래스가 있습니까?Ruby에서 "NullPointerException"을 발생 시키십시오

답변

8

상황에 맞게 수하면 ArgumentError 올리기. 당신은 이런 일을 할 수있는 :

def i_dont_take_nils_from_nobody x 
    raise ArgumentError.new "You gave me a nil!" if x.nil? 
    puts "thanks for the #{x}" 
end 

i_dont_take_nils_from_nobody nil 
#=> ArgumentError: You gave me a nil! 
i_dont_take_nils_from_nobody 1 
#=> thanks for the 1 
5

예외 목록에 그런 내용이 없습니다.

nil은 개체이며 항목이 nil이 아닌지 확인하기 위해 검사 할 수 있습니다.

result = Base.find(blah) 
result.nil? 

nil을 무기 호에 메소드를 호출하지 않습니다 (객체)가 당신에게 NoMethodError 예외를 제공해야합니다. 결과는 무기 호이며, 전무 오브젝트가 기능 my_advanced_functionality를 정의하지 않기 때문에

result = Base.find(blah) #returning no result 
result.my_advanced_functionality(42) 

, 당신이 NoMethodError 내가 배우로서 내가 상당한 양의 볼 것들의

하나를 얻을 수 있습니다 것은 당신이 실수로 ID를 불렀다 "입니다 nil의 객체 ID는 4이므로

예외 상황에는 예외적 인 ArgumentError 예외가 있습니다.이 예외는 ArgexError 예외를 가지고 있지만 사용하지는 못했지만 서비스를 제공하는 것처럼 보입니다.

2

루비에서 널 포인터가 아니지만, 당신이 원하는 경우에 당신은 여전히 ​​예외를 발생시킬 수 있습니다

 
>> class NullPointerException < Exception; end 
=> nil 
>> raise NullPointerException 
NullPointerException: NullPointerException 
    from (irb):2 
+1

1 - 라이너 : 클래스 NullPointerException이 <예외를 발생; 본인; 종료 – klochner

관련 문제