 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Enum в аргументах (тест на знания)
| |
| AirKite | Дата: Среда, 25.04.2012, 05:30 | Сообщение # 1 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус: 
| Собственно стало интересно, насколько быстро можно получить ответ на такой простой вопрос, в русском сообществе. Только что задавал его на sa-mp.com. В качество ответа я получил целых 2 поста, на которые невозможно смотреть без facepalm. В итоге к ответу пришёл сам, интуитивно. Либо это где то у меня уже лежало в памяти, но я забыл.
Собственно вопрос решение задачи: Code enum enum_test{ test, test_string[128], lol }; new test[123][enum_test];
Simple_test_int(count, enum_c) { return test[count][enum_c]; }
Code warning 213: tag mismatch // на строке: return test[playerid][enum_c]
UPD: Хах, далее опять наткнулся на мелочь, спасибо [RD]Chez, по ходу шуток натолкнулись на поправку ещё дополнительной проблемы Так что иногда идеи которые на первый взгляд выглядят CRAZY могут быть очень даже адекватными
[1337GAMES] Easy RP (SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)
Jabber: airkite@qip.ru [Addon] QuickBinder [FS] Online Players Record
Сообщение отредактировал AirKite - Среда, 25.04.2012, 06:11 |
| |
|
|
| Vagrant | Дата: Среда, 25.04.2012, 09:59 | Сообщение # 2 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Вопрос хороший, просидел 20 минут, пока не догадался до такого способа. Кстати говоря, как-то давно видел такое в одном скрипте. Quote (AirKite) return test[playerid][enum_c] return test[count][enum_test:enum_c] Code enum enum_test { test, test_string[128], lol };
new what[123][enum_test];
Simple_test_int(count, enum_c) { return what[count][enum_test:enum_c]; } Как я понял, это используется для указания определённой нумерации, то есть енума. При таком использовании даже удобнее, так как функцию можно уже писать: Simple_test_int(120, test); Code Simple_test_int(count, enum_test:enum_c) // Ну или указать вот так. { return what[count][enum_c]; }
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
Сообщение отредактировал Vagrant - Среда, 25.04.2012, 10:12 |
| |
|
|
| AirKite | Дата: Среда, 25.04.2012, 10:11 | Сообщение # 3 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус: 
| Vagrant, всё верно. Только я походу подогнался что Simple_test_int(count, const enum_c) нужен о_О. Я с просони, а [RD]Chez наоборот с засони А казалось: Quote (AirKite) иногда идеи которые на первый взгляд выглядят CRAZY могут быть очень даже адекватными
Тема на sa-mp.com забавней: http://forum.sa-mp.com/showthread.php?p=1820449
[1337GAMES] Easy RP (SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)
Jabber: airkite@qip.ru [Addon] QuickBinder [FS] Online Players Record
|
| |
|
|
| Vagrant | Дата: Среда, 25.04.2012, 10:19 | Сообщение # 4 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| AirKite, const? У меня был первый вариант именно с const. Но потом я подумал зачем здесь конст, если номер столбца никак не изменится в любом случае. Или может я что-то про const не знаю. На sa-mp.com больше всего убил этот ответ: Quote enum enum_test{ test, test_string[128], lol }; new test[123][enum_test]; Simple_test_int(count, enum_c) { return test[count][enum_c]; {} } Гениально мать его. Ну следующий ответ в принципе и не удивил, особенно после первого этого стоило ожидать. Как по моему большинство американцев любит писать в стиле: new test [ 123 ] [ enum_test ] ; Добавил: Я думаю правильнее всё таки будет второй мой вариант: Code Simple_test_int(count, enum_test:enum_c) { return what[count][enum_c]; } Так как если написать: Code Simple_test_int(count, const enum_c) { return what[count][enum_test:enum_c]; } А потом далее использовать функцию так: Simple_test_int(120, 8); То компилятор промолчит. А иначе, как в первом варианте, будет такой же варнинг (warning 213: tag mismatch), что бы не допускать лишних ошибок в моде, это будет полезнее.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
Сообщение отредактировал Vagrant - Среда, 25.04.2012, 10:32 |
| |
|
|
| Молорище | Дата: Среда, 25.04.2012, 10:55 | Сообщение # 5 |
|
Молор
Группа:
Продвинутые
Сообщений: 427
Награды: 11
Город: Санкт Петербург
Замечания: 0%
Статус: 
| [off] Объясните наконец, что это вообще значит?[/off]
Че то я не допер, что тебе вообще надо от этого enum'а, AirKite
Мне нечего делать.
|
| |
|
|
| AirKite | Дата: Среда, 25.04.2012, 11:04 | Сообщение # 6 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус: 
| Vagrant, смотря как использовать. твой вариант enum_test:enum_c не подойдёт для what[count][enum_c+1] [off]Quote (Fiskar) const
Объясните наконец, что это вообще значит? Тебя прям как в гугле забанили
const помогает избежать перезаписи данных. погугли "const", почитай [/off]
[1337GAMES] Easy RP (SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)
Jabber: airkite@qip.ru [Addon] QuickBinder [FS] Online Players Record
Сообщение отредактировал AirKite - Среда, 25.04.2012, 11:10 |
| |
|
|
| Geryy | Дата: Среда, 25.04.2012, 11:10 | Сообщение # 7 |
|
Советчик
Группа:
Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус: 
| Quote (AirKite) смотря как использовать. твой вариант enum_test:enum_c не подойдёт для what[count][enum_c+1] не, ну в общем-то конечно пойдет, хоть ругаться и будет. Но зачем это надо вообще? енумы для того и сделаны, чтоб не париться с цифрами.
Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
|
| |
|
|
| Vagrant | Дата: Среда, 25.04.2012, 11:50 | Сообщение # 8 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Quote (AirKite) Vagrant, смотря как использовать. твой вариант enum_test:enum_c не подойдёт для what[count][enum_c+1] В принципе тоже верно. Quote (Geryy) не, ну в общем-то конечно пойдет, хоть ругаться и будет. Но зачем это надо вообще? енумы для того и сделаны, чтоб не париться с цифрами. Например при использовании циклов. Пример: Quote enum pweap { pWe1, pAm1, pWe2, pAm2, pWe3, pAm3, pWe4, pAm4, pWe5, pAm5 };
new PlayerWeap[MAX_PLAYERS][pweap];
InfoAmmo(playerid, const enum_c) { return PlayerWeap[playerid][pweap:enum_c]; }
for(new playerid=0,i=0;i<11;i++) { printf("%d: %d",i,InfoAmmo(playerid,i+1)); i++; } Проверяем кол-во патронов у игрока. Может и не лучший пример, но кто знает какие задачи будут стоять.
Fiskar, const - это константа, то есть при объявлении константы const val = 100; это тоже самое что если ты напишешь #define val 100, при использовании позволяет избежать перезаписи данных. Так как константа не может быть изменена, на то она так и называется. Quote (Википедия) Конста́нта в программировании — способ адресования данных, изменение которых рассматриваемой программой запрещено.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
Сообщение отредактировал Vagrant - Среда, 25.04.2012, 11:56 |
| |
|
|
| Latron | Дата: Среда, 25.04.2012, 13:15 | Сообщение # 9 |
|
Группа:
I'm V.I.P.
Сообщений: 2115
Награды: 22
Город: Орел
Репутация: 1604
Замечания: 0%
Статус: 
| Fiskar, Конста́нта в программировании — способ адресования данных, изменение которых рассматриваемой программой запрещено. ( вики ) const - ( константа ) - постоянное значение которое не может меняться. Например: new const array[ ] = "Lorem Ipsum";Добавлено (25.04.2012, 13:15) --------------------------------------------- Оу, Vagrant, не заметил что ты уже дал ответ))
Моё портфолио
Мои работы: [ Lesson ] Операторы в PAWN. [ Lesson ] Переменная. [ GM ] RegSys. ( Last update: 21.04.2012 )
Сообщение отредактировал Latron - Среда, 25.04.2012, 13:15 |
| |
|
|
| AirKite | Дата: Среда, 25.04.2012, 17:09 | Сообщение # 10 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус: 
| Quote (Vagrant) const val = 100; это тоже самое что если ты напишешь #define val 100 Максимум только с точки зрения перезаписи, но вещи совсем разные. new const var = 100; создаёт var со значением 100, не позволяет. define обработчик компилятором равный тому же что если вы бы пробежались по исходнику заменив VAR на 100 (#define VAR 100).
Quote (Geryy) Но зачем это надо вообще? енумы для того и сделаны, чтоб не париться с цифрами. Так циферки никто и не предлагает использовать. Пример: Simple_test_int(123, blablabla); В моём случае это пригодилось для создания функции, идеология которой требовала использовать постоянно 2 enum-а. Типа: Code enum blabla{ test, test_two, test2, test2_two, lol, lol_two } Используем в качестве аргумента enum Simple_test_int(test); а внутри уже обрабатываем enum_c и enum_c+1 как нам нужно.
Я мог подобное сделать #define-ом, однако как уже выше я говорил, это всего лишь автозамена. В данном случае же, я сделал не только удобность кода но и его оптимизацию.
[1337GAMES] Easy RP (SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)
Jabber: airkite@qip.ru [Addon] QuickBinder [FS] Online Players Record
Сообщение отредактировал AirKite - Среда, 25.04.2012, 17:11 |
| |
|
|
| Vagrant | Дата: Среда, 25.04.2012, 17:37 | Сообщение # 11 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Quote (AirKite) define обработчик компилятором равный тому же что если вы бы пробежались по исходнику заменив VAR на 100 (#define VAR 100). Позор мне, я это знаю но почему-то отложилось в моей памяти как нужная и верная информация: Quote (Vagrant) return test[count][enum_test:enum_c] Так и не верная: Quote (Vagrant) это тоже самое что если ты напишешь #define val 100
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
|
| |
|
|
|
 |
|
 | |
| |
|