문제

그것은 강력한 매크로 인 것처럼 보이지만, 나는 그것을 바보 같은 예제에 적용하지 못하고 있습니다. 당신은 그것의 진정한 사용을 보여줄 수 있습니까?

감사!

도움이 되었습니까?

해결책

비교하다:

user> (:baz (:bar (:foo {:foo {:bar {:baz 123}}})))
123
user> (java.io.BufferedReader. (java.io.FileReader. "foo.txt"))
#<BufferedReader java.io.BufferedReader@6e1f8f>
user> (vec (reverse (.split (.replaceAll (.toLowerCase "FOO,BAR,BAZ") "b" "x") ",")))
["xaz" "xar" "foo"]

에게:

user> (-> {:foo {:bar {:baz 123}}} :foo :bar :baz)
123
user> (-> "foo.txt" java.io.FileReader. java.io.BufferedReader.)
#<BufferedReader java.io.BufferedReader@7a6c34>
user> (-> "FOO,BAR,BAZ" .toLowerCase (.replaceAll "b" "x") (.split ",") reverse vec)
["xaz" "xar" "foo"]

-> 호출을 중첩하는 간결한 방법을 원할 때 사용됩니다. 그것은 당신이 내부 아웃이 아닌 호출 될 순서대로 전화를 나열 할 수있게 해주므로 더 읽기 쉬울 수 있습니다. 세 번째 예에서, 일부 인수와 그들이 속한 기능 사이에 얼마나 많은 거리가 있는지 확인하십시오. -> 인수와 기능을 조금 더 깨끗하게 그룹화 할 수 있습니다. 매크로이기 때문에 Java Call에도 적용됩니다.

-> 그렇게 강력하지 않으며, 그것은 단지 몇 개의 파렌을 구해줍니다. 그것을 사용하는지 아닌지는 스타일과 가독성의 문제입니다.

바닥을보세요 clojure.zip 이것이 어떻게 도움이되는지에 대한 극단적 인 예.

(-> dz next next next next next next next next next remove up (append-child 'e) root)

다른 팁

에서 가져 왔습니다 위키 나는 항상이 예제를 인상적으로 발견했습니다.

user=> (import '(java.net URL) '(java.util.zip ZipInputStream))
user=> (-> "http://clojure.googlecode.com/files/clojure_20081217.zip"
           URL. .openStream ZipInputStream. .getNextEntry bean :name)

브라이언이 말했듯이 - '다른 스타일'만큼 '유용하지 않습니다'. 나는 모든 Java interop에 대해이 형태의 'x로 시작'한 다음 y와 z ...

기본적으로 4 가지 옵션이 있습니다.

; imperative style named steps:
(let [X something
      b (Y X)
      c (Z b)] c)

; nested calls
(Z (Y X))

; threaded calls
(-> X Y Z)

; functional composition
((comp Z Y) X)

나는 -> Java Interop을 위해 정말로 빛나지 만 다른 곳에서는 피합니다.

(defn search-tickets-for [term]
  (-> term search zip-soup first :content
    ((partial filter #(= :body (:tag %)))) first :content
    ((partial filter #(= :div (:tag %))))
    ((partial filter #(= "content" ((comp :id :attrs) %))))
    ((partial map :content)) first ((partial map :content))
    ((partial map first)) ((partial filter #(= :ul (:tag %)))) first :content
    ((partial map :content))
    ((partial map first))
    ((partial mapcat :content))
    ((partial filter #(= :h4 (:tag %))))
    ((partial mapcat :content))
    ((partial filter #(= :a (:tag %))))
    ((partial mapcat :content))))

#Clojure의 ClojureBot은 이것을 검색에 Assembla 티켓을 사용합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top