Scala 隐式转换与类型类模式深度解析
1. JSON 处理与表达式问题
在 Scala 里,当处理 JSON 字符串时,有时会出现字符串片段数量比值参数多的情况,此时多余的末尾字符串片段可直接舍弃。例如在 REPL 会话中,我们可以创建一个 JSON 对象:
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"}
这背后涉及到一个重要概念——表达式问题。表达式问题指的是在不修改模块源代码的前提下扩展其功能的需求。在面向对象编程中,通常通过子类型化(更准确地说是子类型多态)来解决这个问题。比如,我们依据抽象进行编程,在需要改变行为时使用派生类。Bertrand Meyer 提出的开闭原则描述了这种面向对象编程的方法,即基类型在抽象中声明行为,子类型在不修改基类型的情况下实现相应的行为变体。
然而,Scala 虽然支持这种技术,但它存在一些缺点。例如,某些行为是否应该定义在类型层次结构中可能存在疑问;而且这些不常用的行为对于大多数上下文来说,会成为客户端代码的负担。一方面,额外的未使用代码会占
超级会员免费看
订阅专栏 解锁全文
7

被折叠的 条评论
为什么被折叠?



