влад10011
offline
Опыт:
2,337Активность: |
Вопросы про TextMacro
Пару вопросов о TextMacro:
№1)Что происходит с кодом внутри TextMacro? 1)Он превращается в комментарий и при вызове RunTextMacro генерируется 2)Он остаётся на своём месте и копируется(в место вызова) при вызове RunTextMacro 3)Что то другое, о чём я не подозреваю =_= А точнее вопрос: отправляется ли код внутри TextMacro в общий код или его невидно, пока не вызовешь? №2)Влияют ли аргументы TextMacro на define?(например define A(s)=$type$$name$##s) 1)угу 2)нет Отредактировано влад10011, 19.10.2012 в 22:48. |
19.10.2012, 22:43 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DualShock
offline
Опыт:
5,023Активность: |
textmacro нестоит юзать вместе с cjass...
остальное смотри в мануале:
» Text Macros
Данная структура позволит генерировать код, используя строчные переменные, которые могут внедряться в любую часть кода. Но, это всё статично, т.е. делаться только при сохранение карты в WE в игре таких чудес творить ясно что нельзя. Для объявления textmacro используется следующая конструкция: Код: //! textmacro MyNameTextMacro takes string_var1, string_var2, string_var3,... /*тело вставки*/ //! endtextmacro Важно отметить, что //! не комментарий, а именно обозначение конструкции. Что бы вставить тот текст, который находиться в соответствующем textmacro в код необходимо написать: Код: //! runtextmacro MyNameTextMacro("<string1>", "<string1>", "<string1>",...) Без вызова textmacro код, находящийся в нем будет проигнорирован. При его вызове текст, находящийся в textmacro будет вставлен в код в месте вызова с указанными аргументами. Немного запутанно, на примере думаю будет понятней: Код: //! textmacro t takes type, name function MyFunc$name$ takes $type$ returns nothing endfunction //! endtextmacro //! runtextmacro t("integer i", "Int") //! runtextmacro t("real r", "Real") Будет скомпилировано на Jass как: Код: //textmacro instance: t("integer i", "Int") function MyFuncInt takes integer i returns nothing endfunction //end of: t("integer i", "Int") //textmacro instance: t("real r", "Real") function MyFuncReal takes real r returns nothing endfunction //end of: t("real r", "Real") Также textmacro может вообще не брать аргументы: Код: //! textmacro MyText call DoNothing() //! endtextmacro function MyFunc takes nothing returns nothing //! runtextmacro MyText() endfunction Данная конструкция совместима с библиотеками (library) и областями (scope). Отредактировано DualShock, 20.10.2012 в 16:02. |
19.10.2012, 23:04 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
сначала мы описываем макрос типа так
затем, в нужной части кода мы просто вызываем макрос
и получится на месте вызова такой код
забавная штука
Hate добавил: использовать вместе с сижасс текстмакросы может не позволять наверное только религия) |
19.10.2012, 23:31 | #3
+1/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
влад10011
offline
Опыт:
2,337Активность: |
DualShock, Hate, Я знаю как его юзать........ =_=
я попросил ответить на вопросы в первом посту..... |
20.10.2012, 08:23 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
второе вам самому проверить религия не позволяет? |
20.10.2012, 10:32 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
а что мешает скомпилировать и посмотреть код, ну кроме религии, функции описывающей строение рук, точки ввода мыслей в мозг и иных объективных причин не связанных с религией? |
20.10.2012, 10:49 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Юзайте дефайны, они лучше vjass макросов, ибо можно в дефайнах юзать #if #endif, макросы внутри макросов. Передавать в макросы другие макросы. |
20.10.2012, 11:29 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Faion, в макросах можно static if. |
20.10.2012, 16:00 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
в макросах можно написать что угодно, это ж текст |
20.10.2012, 18:04 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
DioD, нет.
Faion добавил: Добавлю в "защиту" дефайнов vblock { } :) |
20.10.2012, 18:16 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
а вот и да.
хотя может быть вы юзаете какие то неправильные макросы, но у меня пишет что я хочу при чём всегда, главное правильно задать. |
21.10.2012, 12:52 | #11
+4/−2
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
DioD, нет. Вы просто не юзали их по максимуму, есть не мало вещей которые "недопустимы". Один из багов Адольф уже несколько месяцев "фиксит" :) |
21.10.2012, 20:21 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
не пользуюсь цджазом, попробуйте буржуйский вджаз |
22.10.2012, 10:56 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
DioD:
Там есть аналог vblock? И аргументом может быть код? |
22.10.2012, 11:05 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
О чем спор? #define в cJass умеет все, что и textmacro в vJass и многое другое, будь то:
|
22.10.2012, 12:36 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
ADOLF:
не различий, а скорее фич, которых нету в vjass макросах, и без которых они не уперлись :nate: |
22.10.2012, 13:15 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|