2017-10-19 4 views
0

figwheel 또는 lein-autoreload을 사용하여 REPL의 중요한 측면을 알지 못하는 것 같습니다.Clojure에서 함수를 다시 컴파일하면 컴파일러 경고가 발생합니다.

언급 된 플러그인 중 하나를 사용하여 REPL을 시작하고 프로젝트 파일 중 하나에서 변경을 수행하면 보통 컴파일러 경고가 표시됩니다. 종종 이것은 REPL을 다시 시작해야한다는 것을 의미합니다. REPL은 해당 플러그인의 모든 목적을 이깁니다.

예를 들어 설명해 드리겠습니다. 나는 세 파일을 가지고 : core.cljs, demoscene.cljsobjects.cljs. 그들은 내가 언급 한 순서대로 서로를 참조합니다. (:require [ns.demoscene :as demoscene]). 내 주요 기능은 core.cljs에 있습니다.
lein figwheel을 사용하여 REPL을 시작하고 브라우저를 시작하면 모든 것이 잘 동작합니다.

Compile Warning src/cljs/ns/demoscene.cljs 
update already refers to: cljs.core/update being replaced by: ns.demoscene/update 

이 하나 개 이상의 수준에서 정말 홀수가 :

  1. 내가 demoscene.cljs
  2. 을 편집하지 않은 내가 objects.cljs에서 함수를 편집하고 변경 사항을 저장하면
    , 나는 컴파일러 경고를
  3. 왜해야합니까 cljs.core/updatens.demoscene/update
  4. 으로 교체해야합니다. (내가 figwheel 세션을 다시 시작하지 않습니다.) 모든 것이 다시 정상적으로 작동합니다. 변경 사항이 적용됩니다.

백그라운드에서 무슨 일이 일어나는지 말해 줄 수 있습니까? 이 상황을 이해하기 위해 나는 무엇을 놓치고 있습니까? 이러한 경고를 피하려면 어떻게해야합니까?

더 이상 리소스가 필요하면 알려주십시오. core.cljs :

답변

4

나는 그것이 당신이 편집했던 파일에 필요한 있기 때문에이 다시로드 할 수 있다고 생각 demoscene.cljs

편집하지 않았다. 그 core 기능은 기본적으로 항상 사용할 수 있기 때문에

은 왜 cljs.core/update, 당신이 core 네임 스페이스의 함수와 같은 이름의 함수를 정의 할 때마다이 경고가 표시됩니다 ns.demoscene/update

교체해야합니다 당신의 네임 스페이스. 이 경고는 해당 네임 스페이스의 update에 대한 호출이 이 아니고이 아니거나 cljs.core/update이 될 것이라고 말합니다. 네임 스페이스에 정의한 함수는 update입니다. 예를 들어 excludecore 함수를 네임 스페이스에서 "흐리게 처리"할 수 있습니다. (:refer-clojure :exclude [update])

+0

다른 언급 할 점은 OP가 보는 것은 경고와 오류가 아니라는 것입니다. 경고의 의미를 이해하는 것이 중요하지만 오류가 아니라 경고임을 강조하는 것이 중요합니다. 앞서 지적한 바와 같이, 경고는 핵심 기능의 재정의와 다른 응답에서 지적한대로, 일반적으로 좋은 아이디어는 아닙니다. 그렇게 할 진정한 필요성/이유가 없다면 말입니다. –

+0

답변 해 주셔서 감사합니다. 솔직히 말해서, 나는 핵심 기능이 존재한다는 것을 알지 못했다. 그러나 이제 나는 경고를 다시 읽었지만, 분명해진다. 나는 지금 바보 같아서 ... – Joshua

3

Taylor는 정확하지만 실제로는 핵심 기능을 숨기는 것이 좋지 않다는 것을 알고 싶습니다.당신이했습니다 때 시간 낭비의 공정한 조금 이어질하는 경향이

  • 당신이했던 것을 잊어 수행

    1. 그 (나중에 시간이 될 수 있습니다, 개월 수, 심지어 당신을하지 않을 수 있습니다)
    2. 파일의 다른 부분에서 core 함수를 사용하려고 시도했습니다.
  • +1

    답장을 보내 주셔서 감사합니다. 나는 그 그림자가 나쁜 습관이라는 것에 완전히 동의한다. 나는 함수에 따라 이름을 바꿨다. – Joshua

    관련 문제