기록되지 않은 기능에 대한 의존도 감소
3165 단어 leiningen
묘사
우리는 단지 제로 누출merge
이나 select-keys
만 방지할 뿐이다.이것은 어의를 바꾸지 않을 것이다.내가 만들고 있는 문미로 이걸 잡았어.
토론 #1
나는 아직도 많은 다른 코드가nil에서 사용되고 있다고 의심한다merge
(나는 나의 일련의 고객과 내부 프로젝트에서 모두 가정했다)--linter의 동기는 무엇입니까?보증 시도merge
의 지도가 0이 아닙니까?현재
merge
의 실현은 분명히 doing a lot of work to handle nils이며, 이 언어는 이 방면의 향후 호환성을 파괴할 수 없을 것 같다.분명히 이것은 그리 대단한 일이 아니지만, 만약 모든 사람이 그들이 사용하는 어느 곳 merge
에서 이렇게 해야 한다면, 코드는 더욱 시끄러워질 것이다.그래서 더 많은 이유를 알고 싶어요.코이린 안녕,이것은 내가 스스로 옳다고 여기는 linter이다. 이것은 내가 생산 과정에서 찾고 싶지 않은 코드를 지적한다.
개인적으로 나는
토론 #2
의 모든 논점에 지도가 있다는 것을 믿지 않을 것이다.나는 생산 중에 0을 통과하지 말라고 건의한다.이것은 미묘한 문제입니다. docstring은 맵 매개 변수에 'conj' 라고 주장하지만, 분명히 호출되지 않았습니다. (conj nil...)니가 니엘을 첫 번째 매개 변수로 삼으면이것은 나에게 너무 무단적이다.나는 싫은 것이 한 무더기 있는데, 나의 편견이 사라지고 있다!
이것은 어쨌든 단지 촉진 요청일 뿐이다. 아마도 개발자는 왜 그들이 이 요청을 받아들였는지 설명하고 싶어 할 것이다.
나는 이것이 코드의 총명함/취약함을 격파하기 위해서라고 생각한다.조건문을 분석하여 그것의 작업 원리를 흥미롭게 하다.
merge
나는 클로주가 닐을 처리할 때 소홀히 하는 것을 좋아하지 않지만, 사실은 이렇다.대다수의 말투가 분명하지 않은 언어에서 제로 집합과 빈 집합을 혼동하는 것은 상습적인 방법이며, 이 점을 반대하는 것은 지속적인 전투가 될 것이다.나는 코드 라이브러리를 엉망진창으로 만들 가치가 없다고 생각한다.나는 이것이 유일하게 이 방면을 보여주는 곳이 아니라고 믿는다.토론 #셋
나는 정확성을 개의치 않는다. 게다가 이 패치는 문제가 없다.그럼에도 불구하고, 나는 기록되지 않은 기능을 사용하는 것이 반드시 문제가 되는지 확실하지 않다. 그것은 상위 문제 (즉 적당한
토론 #4
문서가 부족한 것) 일 수도 있다.미기록 행위에 의존하지 않는 정확한 프로그램을 가지는 것은 좋은 일이지만, 읽을 수 있거나 코드 수정을 방해할 때 합리적이라면 미기록 행위를 기록해야 할지도 모른다.이것은 공공 관계와는 다소 무관하지만, 나는 어떤 미기록 기능이 가장 자주 사용되는지 보고 싶다.아마도 그것은
clojure.core
에서 기록되지 않은 특성을 상세하게 설명하는 논거로도 쓸 수 있을 것이다.clojure.core
clojure에서 nils를 토론 #5
매개 변수로 사용할 수 있도록 허용합니다.개념적으로 말하자면, 그것은merge
의 나머지 부분에 적합한 것 같아서, 나도 그것에 몇 번 의존한 적이 있을 것이다.나는 더 좋은 해결 방안은 이런 행위를 정의하고 기록하는 것이지 그것을 사용하지 않는 것이 아니라는 것에 동의한다.clojure.core
이런 구석 사례들은 나로 하여금 제로를 토론 #6
에 전달하는 것을 피하게 하기에 충분하다.나는 이것들이 기록되지 않기를 바란다.(merge nil)
;=> nil
(merge nil nil nil)
;=> nil
merge
는 여기(그리고 Clojure의 많은 다른 곳)의 원 합병 함수의 상하문에서nil을 토론 #7
에 전파하는 데 좋지 않은 영향을 미치지 않는다.Clojure가 nil을 사용할 때 더 예민해지면 좋은 일이라고 생각하지만, 이것은 반드시 위에서 아래로 진행해야 하는 일이다.이러한 코드 라이브러리에서 이러한 변화를 실현하려고 시도하는 것은 무의미하다.
with-meta
네, 하류의 사용만으로 클로저코어를 변경하도록 강요하는 것은 어리석은 일입니다.나는 이런 경솔/편리함이 Clojure core에서 특히 개발 기간에 자리를 잡았다고 생각한다.
나는 중요한 코드의 경솔함을 피하기 위해 도구를 구축하고 있다.누군가 원합병을 수정하고 작용하는 불변량(은식 불변량이 많다)을 잘못 해석하는 것도 귀찮다.그래서 이것도 방어적인 변화다.
토론 #8
합병 결과가 0이 되지 않는 경우, 간결한 옵션은arg 목록의 끝에 빈 맵을 추가하는 것입니다.(with-meta (merge might-be-nil1 might-be-nil2 {}) {:some :meta})
토론 #9
는 단지 이 PR이 합병에서 비nil 결과를 삭제하려는 것이 아니라토론 #10
에 전달된nil 값(이 특정 상하문에서)은 기록되지 않은 기능에 달려 있음을 분명히 할 뿐이다.Reference
이 문제에 관하여(기록되지 않은 기능에 대한 의존도 감소), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/technomancy/leiningen/issues/1406텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)