17、Clojure 多方法与 Java 交互全解析

Clojure 多方法与 Java 交互全解析

多方法(Multimethods)

多方法支持任意调度,通常基于类型关系工作。有时这些类型是正式的,如 Java 类;有时则是非正式的、临时的,从系统中对象的属性中产生。我们可以通过调度身份来编写自己版本的类作为多方法,示例代码如下:

(defmulti my-class identity)
(defmethod my-class nil [_] nil)
(defmethod my-class :default [x] (.getClass x))

任何空检查都可以用这种方式重写,但原有的 class 函数比多方法版本更易读。在决定是创建函数还是多方法时,可以遵循以下一般规则:
1. 如果一个函数基于一个或多个类型进行分支,考虑使用多方法。
2. 类型可以是你发现的任何类型,不必是显式的 Java 类或数据标签。
3. 你应该能够在不参考 defmulti 的情况下解释 defmethod 的调度值。
4. 不要仅仅为了处理可选参数或递归而使用多方法。
当有疑问时,尝试用两种风格编写函数,然后选择看起来更易读的那种。

Clojure 与 Java 的交互

Clojure 对 Java 的支持强大而精简。它强大在于带来了 Lisp 语法的表现力,以及一些专为 Java 定制的语法糖;精简在于它可以直接触及底层。Clojure 代码编译成字节码,无需经过任何特殊的翻译层就能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值