Макросы

Материал из BestWay wiki
Перейти к: навигация, поиск

Что это такое и зачем они нужны?


Представте себе, что у вас есть куча файлов, в которых нужно написать один и тот же код(чаще - почти один и тот-же, но с минимальными изменениями). А если к тому-же код еще и объемный? Тут на помощь и приходят макросы. Вам достаточно в одном месте создать макрос и затем вызвать его во всех файлах.



Создания макроса


(define "macros_name" %0 код %1 код %2 ...) или (define "macros_name" %a код %b, ...)

Где:

macros_name - имя макроса.
%0, %1, %2 - переменные args.
%a, %b - явно назначенные переменные.



Вызов макроса


Вызов макроса всегда начинается с открывающихся круглых скобок!

("macros_name" args v1 v2 v3) вызов макроса и передача в него переменных args. Счетчик переменных начинается от нуля и...

("macros_name" a(1) b(2)) вызов макроса и передача в него явных переменных a и b.



Примеры


Создание:

 (define "tth"
    {projectileDamageTable {0 %a} {50 %b} {100 %c} {150 %d} {200 %e} {300 (* 0.3 %e)}}
    {range %min %max}
    {curve %curv}
    {spreading 1
        {radiusFunction
            0.0     0
            0.5     1
            0.8    1.3
            1.0     1.8
            1.1     2
            2.0     5
         }
    }
 )

Вызов:

("tth" a(10) b(20) c(30) d(40) e(50) min(100) max(150) curv(gun_medium))

Тоже самое, но с "неявными" переменными:

Создание:

 (define "tth"
    {projectileDamageTable {0 %0} {50 %1} {100 %2} {150 %3} {200 %4} {300 (* 0.3 %4)}}
    {range %5 %6}
    {curve %7}
    {spreading 1
        {radiusFunction
            0.0     0
            0.5     1
            0.83    1.3
            1.0     1.8
            1.1     2
            2.0     5
        }
    }
 )

Вызов:

 ("tth" args 10 20 30 40 50 100 150 gun_medium)

Т.е. во время вызова макроса, сама строка вызова мнимо заменяется этим кодом:


     {projectileDamageTable {0 10} {50 20} {100 30} {150 40} {200 50} {300 (* 0.3 50)}}
     {range 100 150}
    {curve gun_medium}
     {spreading 1
        {radiusFunction
            0.0     0
            0.5     1
            0.83    1.3
            1.0     1.8
            1.1     2
            2.0     5
        }
    }

Переменные можно и не использовать, если они не нужны.

И на последок Чаще всего макросы и вызовы находятся в разных файлах. Если вы нашли вызов и не можете найти сам макрос (или наоборот) - используйте поиск по имени макроса по содержимому файлов.