저는 프로젝트 오일러 질문을 사용하여 클로져를 배울 수있게 도와 드리겠습니다. 알아낼 수없는 예외 상황이 발생했습니다. nillify 및 change-all은 참조 용으로 하단에 정의되어 있습니다.이 NullPointerException의 원인은 무엇입니까?
(loop [the-vector (vec (range 100))
queue (list 2 3 5 7)]
(if queue
(recur (nillify the-vector (first queue)) (next queue))
the-vector))
이 경우 NullPointerException이 발생하며 그 이유를 알 수 없습니다. 내가 볼 수있는 코드의 유일한 부분은 과 같은 예외를 throw 할 수 있지만 nillify에 대한 호출이지만 예외가 throw되기 전에 큐가 한 요소 만 가져 오는 것처럼 보이지 않습니다. 빈 상태가되는 것이고, 그것은 if 문을위한 것입니다.
아이디어가 있으십니까?
가
(defn change-all [the-vector indices val]
(apply assoc the-vector (interleave indices (repeat (count indices) val))))
"는 벡터 및 발 주어진"벡터, 값 및 인덱스들의리스트/모든게 @ indice = 값 승 벡터를 돌려 주어 "벡터를 반환하는 모든 인덱스 엔트리와 nilled되는 발의 배수와 동일하지만, "본래 그대로두고
(defn nillify [coll val]
(change-all coll (range (* 2 val) (inc (last coll)) val) nil))
당신이 NPE 스택 추적을 포함 할 수 있습니다 : 스타일의 문제로
, 바인딩을하게 사용할 수 있습니까? –
또한 첫 번째 줄 끝 부분에 누락 된 괄호가 하나 있다고 가정했지만 루프 본문은 여전히 엉망진창처럼 보입니다. –
루프의 두 번째 줄. 'queue (list (2 3 5 7))]'는'queue (list 2 3 5 7)]'이어야한다. 하지만 그것은 'ClassCastException'을 던지기 만하고'NullPointerException'은 던지지 않았습니다. – Jonas