开发一种用于掷骰子的简单领域特定语言(DSL)。像《龙与地下城》这类游戏的玩家对这样的 DSL 并不陌生。例如下面这个表达式:2 D20 + 1 D6,它的意思是掷两个 20 面骰子和一个 6 面骰子。
表达式2 d20 + 3 d10可以使用 Pharo 语法实现。+和任何其他方法一样,也可以定义在数字以外的类上。像d20这样的方法可以通过类扩展在现有的Integer类上实现;类扩展是定义在类所在包以外的另一个包中的方法。
本练习选自《Learning Object-Oriented Programming, Design and TDD with Pharo》一书,该书可在 http://books.pharo.org 获取。第 12 章:Crafting a simple embedded DSL with Pharo。