I zostały badania kilka zagnieżdżonych wywołań makr, a oni pracowali zgodnie z oczekiwaniami Na przykład, zakładając ficticious dodać makro i następujące wyrażenie (... zgodnie z oczekiwaniami przeze mnie!):Czy można bezpiecznie wykonywać inokacje makro?
add(1, add(2, 3))
Po pierwsze dodawanie wewnętrzne jest rozszerzane (2 + 3), a po drugie strona zewnętrzna wykonuje swoją część (1 + (2 + 3)). Widziałem, że makro zewnętrzne nie otrzymuje żadnego szumu z wewnętrznego wywołania - w wyrażeniu wejściowym - więc wewnętrzna ekspansja wydaje się dla niego całkowicie przezroczysta. Czy ten fakt zawsze trwa (nawet w przypadku bardziej złożonych makr i typów)? Czy to bezpieczne?
Nie byłem w stanie zebrać wystarczającej ilości informacji od skimmingów, aby odpowiednio odpowiedzieć na twoje pytanie, ale możesz być zainteresowany tym artykułem opisującym system makr Rakieta: [Makra, które działają razem: Wiązania kompilacji, Kontury częściowe i Konteksty definicji] (http://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf) –
Nie znam dobrze tego konkretnego artykułu, przeczytałem tylko wersję konferencyjną, ale system makr Scali jest nie do końca porównywalne - powiedzmy, typechecking dzieje się przed ekspansją makr - chociaż wymaga to rozpoznawania nazw i umożliwienia * dodania * higieny przy użyciu reify. Nie bój się: makra Scala nie są domyślnie higieniczne, ale poszczególne makra są, jeśli budujesz tylko AST, by powrócić przez reify (co jest nieco podobne do quasi-cytowania, wciąż nie dostaję tej różnicy szczerze). – Blaisorblade