我正在为我正在开发的可扩展纸牌游戏引擎创建一个 DSL,使用 boo。
我有一个卡片宏,它为一种新型卡片创建一个类,并在构造函数中初始化一些属性。该宏有一些用于设置其他内容的子宏。基本上我希望它变成这样:
card 'A new card':
type TypeA
ability EffectA:
// effect definition
进入这个:
class ANewCard (Card):
def constructor():
Name = "A new card"
Type = Types.TypeA
AddEffect(EffectA())
class EffectA (Effect):
// effectdefintion
效果肯定需要是一个类,因为它会被传递(它是一个策略模式)。
到目前为止,我有这个简单的骨架:
macro card:
yield [|
class $(ReferenceExpression(card.Arguments[0])) (Card):
def constructor():
Name = $(card.Arguments[0])
|]
现在,我不知道应该如何处理 card.Body 以使能力宏向构造函数添加代码,同时还生成一个嵌套类。有什么想法吗?这可以用当前的语言能力来完成吗?