|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Общий вопрос про повторные определения
Вот допустим, есть у нас код.
switch (dir) { case TOP: var i:int = 0 for (var j:int = 0; j < pics[0].length; j++) { что-то делаем с pics[i][j] } break; case RIGHT: var j:int = pics[0].length - 1 for (var i:int = 0; i < pics.length; i++) { что-то делаем с pics[i][j] } break; case BOT: var i:int = pics.length - 1 for (var j:int = 0; j < pics[0].length; j++) { что-то делаем с pics[i][j] } break; case LEFT: var j:int = 0 for (var i:int = 0; i < pics.length; i++) { что-то делаем с pics[i][j] } break; default: } Вообще подробности не важны, может мы несколько раз по разному проходимся по матрице, не суть, главное, что подряд идут несколько похожих по смыслу циклов с i и опционально j. В таком случае компилятор сыпет в консоль ворнинги duplicate variable definition. Но щит, Шерлок, это я и сам вижу, но как лучше от них избавляться? Вариант 1) Забить, но это несолидно, когда проект собирается не молча. Вариант 2) В начале объявить эти злосчастные i и j и убрать объявления. Но может это мои тараканы мне это тоже не нравится, ибо это вроде как повторное использование переменной в другом месте, что не есть хорошо. Есть ли какие-нибудь еще кроме (2) практики исправления таких ситуаций?
__________________
cats are supreme beings |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Только один вариант - обьявить i перед заходом в switch
Можно i=0 вообще убрать из цикла, но так будет не красиво. Немного я упустил Ваш код)) ещё j добавить и делать в таком же духе. Добавлено через 2 минуты var i:int; var j:int; switch (dir) { case TOP: for (i=0; i < pics[0].length; j++) { что-то делаем с pics[i][j] } break; case RIGHT: for (i=0; i < pics.length; i++) { что-то делаем с pics[i][j] } break; case BOT: for (i=0; i < pics[0].length; j++) { что-то делаем с pics[i][j] } break; case LEFT: for (i=0; i < pics.length; i++) { что-то делаем с pics[i][j] } break; default: } |
|
|||||
Объявить в самом начали, а потом уже присваивать им значения?
|
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
правильнее всё таки писать var в цикле.
Добавлено через 33 секунды Bletraut, да дурдом |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
Какой в ней смысл? переменная, что где-то перед циклом используется?
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Так ведь работает.. |
|
|||||
Все локальные переменные метода находятся в одном скоупе, вне зависимости, где они они были объявлены. Если это не переменные вложенной функции, она не расширяет родительский скоуп, но содержит его в себе. Компилятор все равно все переменные, где бы они не объявлялись, затолкает в хидер метода, плюс уберет повторное определение, если таковое имеется, и ругнется ворнингом.
__________________
тут я |
|
|||||
Цитата:
Если смириться тяжело - в опциях mxmlc есть галочка - не выдавать ворнинги про дублирование переменных (проверять порядок объявления и область видимости, правда, компилятор не будет что так, что так - просто флудить не будет) Насколько опасно отключать? Ну случалось, внутри блока объявлял переменную, думая что её нет снаружи и узнавал это из ворнинга. С другой стороны отключать/не отключать - это мёртвому припарки. Когда у тебя половину переменных надо искать на полэкрана выше и не понятно где ты их собирался использовать, а где - нет, и когда компилятор даже не проверяет, объявлена ли переменная до её использования. Сильный аргумент _не_ отключать: не пугать людей, которые так или иначе будут компилировать ваш код - по умолчанию то предупреждения включены Цитата:
Но есть хорошая новость: во многих других языках область видимости переменных ограничена блоком, а не методом (Java, C#, haXe, F#, Ocaml, C++) Последний раз редактировалось expl; 11.10.2013 в 00:50. |
Часовой пояс GMT +4, время: 18:15. |
|
« Предыдущая тема | Следующая тема » |
|
|