2011-10-11 5 views
0

라이브러리 에서 PhoneNumberUtil.parse 함수는 NumberParseException을 던집니다. 이 예외를 정상적으로 처리하고 싶습니다. 나는 (java -cp path/to/clojure.jar:path/to/libphonenumber.jar clojure.main -i scratch.clj 호출) 다음과 같은 일회성 스크립트를 실행 해요Clojure에서 사용자 정의 예외 캐치

: catch NumberParseException, catch PhoneNumberUtil/NumberParseExceptioncatch (.NumberParseException phoneUtil)의 나는 일반적인 catch Exception 그것을 실행하는 경우

(import '(com.google.i18n.phonenumbers PhoneNumberUtil)) 

(defn parse-phone-no 
    "Convert the phone number to standard form, using the libphonenumber class. 
    Arguments: 
    raw-phone-no - the phone number to convert 
    Returns: 
    the canonical version of the phone number, or nil if the phone number was 
    invalid." 
    [raw-phone-no] 
    (do 
    (def phone-util (PhoneNumberUtil/getInstance)) 
    (try 
     (do 
     (def us-number (.parse phone-util raw-phone-no "US")) 
     (.getNationalNumber us-number)) 
     (catch NumberParseException e 
     nil)))) 

(println (parse-phone-no "5")) 

다음 잘 작동하지만 조합 Unable to resolve classname 오류가 발생합니다. 사용자 정의 예외를 잡아서 다른 사람들이 슬라이드하게하고 싶습니다. 그래서 당신의 도움에 감사드립니다.

덕분에, 케빈

+0

또한 로컬 변수를 만들기 위해'def' 대신에'let'을 사용하는 것을 고려해야합니다. (이 문맥에서 "고려"는 다음을 의미합니다 : "절대적으로 이것을하십시오. 그러나 Clojure를 배우면 잠시 "). 놀랍게도, 나는 당신과 관련된 순간의 질문을 찾을 수 없다 : 죄송합니다. – amalloy

+0

어쩌면 하나를 물어보고 스스로 대답 할 수 있을까요? 왜냐하면 제 문법이 정말 엉터리라는 것을 압니다. –

답변

4

그냥 PhoneNumberUtil처럼, 당신도 네임 스페이스에 importNumberParseException 또는 캐치 식의 완전 수식 패키지를 제공해야합니다.

예외가 내부 클래스 인 경우 clojure가 OuterClass $ InnerClass로 변환됩니다 (여전히 패키지로 가져 오거나 정규화해야 함).