Създавам 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, за да накарам макроса за способности да добави код към конструктора, като същевременно генерира вложен клас. някакви мисли? Може ли това да се направи с текущите езикови възможности?