clojure-基本语法-流程控制(二)
二、异常处理
Clojure代码里面抛出来的异常都是运行时异常。当然从Clojure代码里面调用的java代码还是可能抛出那种需要检查的异常的。try,catch,finally 以及throw 提供了和java里面类似的功能:
try、catch、throw、finally:
user=> (try (throw (Exception. "error")) (finally (println "final")))finalException error user/eval310 (NO_SOURCE_FILE:1)
user=> (try (/ 3 0) (catch Exception e (println e)))#<ArithmeticException java.lang.ArithmeticException: Divide by zero>nil
user=> (assert true)niluser=> (assert false)AssertionError Assert failed: false user/eval317 (NO_SOURCE_FILE:1)user=> (assert nil)AssertionError Assert failed: nil user/eval319 (NO_SOURCE_FILE:1)user=> (assert 0)niluser=> (assert [1 2 3])niluser=> (assert "foo")nil
user=> (repeatedly 5 #(rand-int 11))(6 8 2 6 6)
user=> (repeat 5 (int (rand-int 100)))(30 30 30 30 30)
user=> (repeatedly #(rand-int 11))OutOfMemoryError Java heap space java.util.Arrays.copyOf (Arrays.java:2882)user=> (take 5 (repeatedly #(rand-int 11)))(10 7 0 2 8)
user=> (take 10 (iterate inc 5)) ; (5 6 7 8 9 10 11 12 13 14)user=> (take 10 (iterate #(+ % 5) 5)) ; (5 10 15 20 25 30 35 40 45 50)user=> (take 10 (iterate #(* % 2) 2)) ; (2 4 8 16 32 64 128 256 512 1024)
user=> (dotimes [num 3] (println "number:" (inc num)))number: 1number: 2number: 3nil
user=> (doseq [i (range 10)] (println i))0123456789niluser=> (doseq [i [1 2 3] j [10 20]] (println i "-" j))1 - 101 - 202 - 102 - 203 - 103 - 20nil
user=> (for [x (range 3 7)] (* x x))(9 16 25 36)user=> (for [x [0 1 2 3 4 5] :let [y (* x 3)] :when (even? y)] y)(0 6 12)