में "चलो" द्वारा उलझन में मैंने अभी क्लोजर के साथ खेलना शुरू किया, और मैंने कुछ कार्यों को समझने में मेरी सहायता के लिए एक छोटी सी लिपि लिखी। यह इस तरह से शुरू होता है:क्लोजर
(def *exprs-to-test* [
"(filter #(< % 3) '(1 2 3 4 3 2 1))"
"(remove #(< % 3) '(1 2 3 4 3 2 1))"
"(distinct '(1 2 3 4 3 2 1))"
])
तो यह जाता है *exprs-to-test*
के माध्यम से, उन सब का मूल्यांकन करता है, और प्रिंट इस तरह उत्पादन:
(doseq [exstr *exprs-to-test*]
(do
(println "===" (first (read-string exstr)) "=========================")
(println "Code: " exstr)
(println "Eval: " (eval (read-string exstr)))
)
)
ऊपर कोड सभी कार्य ठीक है। इसलिए हालांकि, (read-string exstr)
दोहराया है मैं let
का उपयोग करें ताकि तरह पुनरावृत्ति को खत्म करने की कोशिश की:
(doseq [exstr *exprs-to-test*]
(let [ex (read-string exstr)] (
(do
(println "===" (first ex) "=========================")
(println "Code: " exstr)
(println "Eval: " (eval ex))
)
))
)
लेकिन इस *exprs-to-test*
में पहला आइटम के लिए एक बार में काम करता है, तो एक NullPointerException
साथ दुर्घटनाओं। let
को दुर्घटना का कारण क्यों है?
यह तय किया गया। इंडेंटिंग स्टाइल टिप के लिए भी धन्यवाद। –