Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Переменные в рекурсии / 4 сообщений из 4, страница 1 из 1
15.10.2014, 11:44
    #38777099
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в рекурсии
Добрый день!
Не могу разобраться в видимости переменных.
Есть один пример, где идет подсчет объектов на форме.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function GetControlCount
lparameters toObject

local lnCount, loControl
lnCount = 0

with toObject
   lcBaseClass = upper(.BaseClass)
   do case
   case m.lcBaseClass+'$' $ "FORM$PAGE$CONTAINER$"
        for each loControl in .Controls
            lnCount = m.lnCount + GetControlCount(m.loControl)
        endfor
   case m.lcBaseClass == "FORMSET"
        for each loControl in .Forms
            lnCount = m.lnCount + GetControlCount(m.loControl)
        endfor
   case m.lcBaseClass == "PAGEFRAME"
        for each loControl in .Pages
            lnCount = m.lnCount + GetControlCount(m.loControl)
        endfor
   otherwise
        lnCount = 1
   endcase
endwith
return m.lnCount
ENDFUNC 


Как оно вообще работает? :)
По идее значение переменной lnCount сбрасывается в 0 при каждом вызове функции
...
Рейтинг: 0 / 0
15.10.2014, 11:52
    #38777107
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в рекурсии
Код: sql
1.
return m.lnCount


Посчитал и вернул что насчитал. Чего сложного?
...
Рейтинг: 0 / 0
15.10.2014, 11:57
    #38777115
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в рекурсии
Извиняюсь, не заметил что рекурсия.
Код: sql
1.
local lnCount


означает что переменная локальная. Т.е. в каждом рекурсивном вызове она своя, а не одна на все вызовы
Равносильно такому
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
local x
x = 10
? fn()
? x
return

func fn
local x
x = 20
return x


убери local x и посмотри что будет
...
Рейтинг: 0 / 0
15.10.2014, 12:13
    #38777134
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменные в рекурсии
Спасибо. Дошло. :)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Переменные в рекурсии / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]