Clojure 学习入门(17)- 异常处理
Clojure代码里面抛出来的异常都是运行时异常。当然从Clojure代码里面调用的Java代码还是可能抛出那种需要检查的异常的。
try - catch - finally 以及throw 提供了和java里面类似的功能。
try、catch、throw、finally:
- user=> (try (throw (Exception. "error")) (finally (println "final")))
- final
- Exception error user/eval310 (NO_SOURCE_FILE:1)
- user=> (try (/ 3 0) (catch Exception e (println e)))
- #<ArithmeticException java.lang.ArithmeticException: Divide by zero>
- nil
assert:
它测试一个表达式, 如果这个表达式的值为false的话,它会抛出异常。
- user=> (assert true)
- nil
- user=> (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)
- nil
- user=> (assert [1 2 3])
- nil
- user=> (assert "foo")
- nil
clojure 完整示例:
- (ns helloclojure.myexception)
- (defn exception_test1 []
- (try (throw (Exception. "--error--"))
- (finally (println "final"))
- ))
- (defn exception_test2 []
- (try (/ 3 0)
- (catch Exception e (println "error: " e))
- ))
- (defn exception_test3 [cls]
- (try (Class/forName cls) true
- (catch ClassNotFoundException e false))
- )
- ;(exception_test1)
- (exception_test2) ; error: #<ArithmeticException java.lang.ArithmeticException: Divide by zero>
- ;(exception_test3 helloclojure.myexception)
- (assert true)
- ;(assert false)
- ;(try (assert false)
- ; (catch Exception e (println "error" e))
- ; (finally (println 'finally)))
- ;(assert nil)
- (assert [1 2 3])
- (assert "foo")
- (assert 0)
- (print 'end)
Clojure 学习入门(17)- 异常处理相关推荐
- Clojure 学习入门(6)- 函数定义
一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下: [python] view plaincopy print? user=> (fn [] "hello&quo ...
- Clojure 学习入门(6)—— 函数定义
一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下: user=> (fn [] "hello") #<user$eval375$fn__376 us ...
- Clojure 学习入门(1) - 学习资料
转自:http://blog.csdn.net/ithomer/article/details/17225813 Clojure(发音类似"closure",['kləʊʒə(r) ...
- Clojure 学习入门(13)- binding
Clojure里面是不支持变量的.Binding跟变量有点像,但是在被赋值之前是不允许改的,包括:全局binding, 线程本地(thread local)binding, 以及函数内的本地bindi ...
- 深度学习——02、深度学习入门 1-7
01深度学习与人工智能简介 什么是人工智能? 观察周围的世界,把看到的事物加以理解,最后通过理解进行一系列的决策. 感知+理解+决策. 学习的能力,是智能的本质! 大数据时代 大数据时代造就了人工智能 ...
- Clojure 学习入门(16)- 正则表达式
一.创建正则表达式 re-pattern函数: 函数 (re-pattern) 接受一个字符串参数,返回一个正则表达式样式(java.util.regex.Pattern类的实例).这个样式能用于 ...
- Clojure 学习入门(15)- 条件判断
一.标准的流程控制 if: 将一个判断表达式作为它的第一个参数进行求值.如果求值为true,那么就返回它的第二个参数(相当于"then"子句)的求值结果.如果结果为false( ...
- Clojure 学习入门(14)- 循环控制
Clojure 基于函数的流程控制 repeatedly 字面意思为重复函数.一般的用法如下: user=> (repeatedly 5 #(rand-int 11)) (6 8 2 6 6) ...
- Clojure 学习入门(12)- map/pmap
clojure map数据结构的常用方法,小结一下 map 各种排序 [html] view plaincopy print? (println (sorted-map-by > 1 " ...
最新文章
- 宏基因组学习交流5群成立
- MySQL 高频面试题,都在这了
- 5天5000万访问的个人网站是如何诞生的?
- D-hdu 1465 不容易系列之一(递推)
- 谈谈我对服务熔断、服务降级的理解
- Luogu3350 ZJOI2016 旅行者 最短路、分治
- c malloc 头文件_C/C++求职者必备 23 道面试题,一道试题一份信心!
- cocos2d之z轴位置示例
- stm32单片机屏幕一直闪_STM32物联网实战项目 - 项目需求
- 2.冒泡排序----还是不懂,先记录下来
- [HNOI 2018]道路
- VDI序曲十九 无须×××直接mstsc到内网服务器
- 【网络信息安全】网络信息安全基础
- 50 Fast Flash MX Techniques
- 现代信号处理——阵列信号处理(阵列信号的高分辨处理)
- HDU Today-SPEA
- Python Network(三)案例(无向图,有向图,权重,点线分类与大小粗细)
- 期货开户趋势的本质是惯性
- 打印机不打印计算机原因,打印机正常但无法打印原因以及如何解决
- Java字符串格式化详解