Scala 布局元素类的设计与实现
1. 布局元素的组合
在 Scala 中,我们可以通过组合操作符来构建复杂的布局元素。例如,下面的表达式可以构建一个由两列组成的大元素,每列的高度为 2:
val column1 = elem("hello") above elem("***")
val column2 = elem("***") above elem("world")
column1 beside column2
打印这个表达式的结果会得到:
hello ***
*** world
布局元素是一个很好的示例,展示了如何借助组合操作符从简单部分构建对象。在后续内容中,我们将定义一些类,使元素对象可以从数组、行和矩形构建而成。这些基本元素对象将作为简单部分,同时我们还会定义 above
和 beside
等组合操作符,这些操作符也常被称为组合子,因为它们能将某个领域的元素组合成新元素。
从组合子的角度思考是进行库设计的一个好方法,我们需要考虑以下几个问题:
- 简单对象有哪些?
- 如何从简单对象构建更有趣的对象?
- 组合子之间如何关联?
- 最通用的组合方式是什么?
- 它们是否满足某些有趣的定律?
如果能很好地回答这些问题,库的设计就会走上正轨。
2. 抽象类的定义
我们的首要任务是