Używanie LabelDef w makrach scala (2.10)

Eksperymentuję z funkcjami makro scala 2.10. Mam problem z używaniemLabelDef w niektórych przypadkach jednak. W pewnym stopniu zajrzałem do kodu kompilatora i przeczytałem fragmentyDokumenty Miguela Garcii ale wciąż tkwię.

Jeśli moje zrozumienie jest poprawne, pseudo-definicja byłaby:
LabelDef(labelName, listOfParameters, stmsAndApply) gdzie 3 argumenty to Drzewa i:
- labelNamejest identyfikatorem etykiety$ L definiowane
- listOfParameters odpowiadają argumentom przekazanym, gdy etykietazastosować występuje, jak w$ L (a1, ..., an)i może być pusty
- stmsAndApplyodpowiada blokowisprawozdania (być może żaden) i ostatecznyzastosować-wyrażenie
nakładanie etykiet oznacza mniej lub więcej GOTO na etykietę

Na przykład w przypadku prostej pętli, LabelDef może ostateczniezastosować samo:
LabelDef($L, (), {...; $L()})

Teraz, jeśli chcę zdefiniować 2 LabelDef, które przeskakują do siebie:

...
LabelDef($L1, (), $L2())
...
LabelDef($L2, (), $L1())
...

Drugi LabelDef jest w porządku, ale kompilator wysyła błąd na pierwszym, „nie znaleziono: wartość$ L2„. To chyba dlatego$ L2 nie jest jeszcze zdefiniowany podczas próby zastosowania go. To drzewo jest konstruowane tak, aby miało to dla mnie sens. Czy moje zrozumienie jest do tej pory poprawne? Ponieważ jeśli nie oczekuje się błędu, oznacza to, że moja implementacja makra jest prawdopodobnie błędna.

W każdym razie wierzę tammusi być sposobem na zastosowanie $ L2 (tj. przeskakiwanie do L2 $) z L1 $,jakoś, ale nie mam pojęcia, jak to zrobić. Czy ktoś ma taki przykład lub jakikolwiek wskaźnik?


Inne niejasne punkty (ale mniej niepokojące teraz) dotyczące używania LabelDef w makrach to:
- czym konkretnie jest drugi argument, w jaki sposób jest używany, gdy nie jest pusty? Innymi słowy, jakie są mechanizmy stosowania etykiety z parametrami?
- czy ważne jest umieszczenie w ostatnim wyrażeniu trzeciego argumentu czegoś innego niż zastosowanie etykiety? (nie żebym nie mógł spróbować, ale makra są nadal eksperymentalne)
-Czy możliwe jest wykonanie etykiety przekazującej - zastosowanie poza LabelDef? (może to jest zbędne pytanie)

Każdy przykład implementacji makra w odpowiedzi jest oczywiście bardzo mile widziany!
Twoje zdrowie,

questionAnswers(1)

yourAnswerToTheQuestion