powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Переменные в рекурсии
4 сообщений из 4, страница 1 из 1
Переменные в рекурсии
    #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
Переменные в рекурсии
    #38777107
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
return m.lnCount


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


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