16、Scala隐式转换:类型类模式与技术问题解析

Scala隐式转换:类型类模式与技术问题解析

1. 表达式问题与解决方案探索

在Scala的REPL会话中,我们可以看到如下操作:

scala> val jsonobj = json"{name: $name, book: $book}"
jsonobj: scala.util.parsing.json.JSONObject = \
  {"name" : "Dean Wampler", "book" : "Programming Scala, Second Edition"}
scala> println(jsonobj)
{"name" : "Dean Wampler", "book" : "Programming Scala, Second Edition"}

这里我们有效地在不编辑任何类型源代码的情况下,为所有类型添加了新方法,这就引出了“表达式问题”。该问题由Philip Wadler提出,指的是在不修改模块源代码的前提下对其进行扩展的需求。

面向对象编程通过子类型化(更准确地说是子类型多态)来解决这个问题。我们编写抽象代码,并在需要改变行为时使用派生类。Bertrand Meyer提出的开闭原则描述了这种面向对象编程的方法,即基类型在抽象中声明行为,子类型实现行为的适当变体,而不修改基类型。

然而,Scala虽然支持这种技术,但也存在缺点。例如,如果某种行为是否应定义在类型层次结构中存在疑问,或者该行为仅在少数上下文中需要,而在大多数上下文中对客户端代码来说是一种负担。这种负担体现在两个方面:一是额外的未使用代码会占用系统资源,随着代码库的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值