我正在使用boo为可扩展的纸牌游戏引擎创建DSL。
我有一个卡牌宏,用于创建新类型的卡牌类,并在构造函数中初始化一些属性。该宏有一些子宏,用于设置其他内容。基本上,我希望它可以将以下内容转换为:
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,以使能力宏在生成嵌套类的同时添加代码到构造函数中。有什么想法吗?这可以使用当前语言功能完成吗?