|
Уровни стека вызововКак и в других языках программирования, в Scilab вызовы функций могут быть вложенными, т.е. функция f может вызывать функцию g, а та, в свою очередь, обращаться к функции h и т.д. Команды, отданные из консоли Scilab, соответствуют нулевому уровню стека вызовов. Инструкции, находящиеся в теле запущенной из консоли функции, составляют первый уровень. Каждый вложенный вызов увеличивает глубину стека на 1, так что текущая глубина равна длине цепочки вложенных вызовов. Функции, представленные в табл. 18, используются для получения информации о состоянии стека вызовов:
whereami возвращает текущее дерево вызовов where возвращает текущее дерево вызовов в виде матрицы
Таблица 18: Команды Scilab для работы со стеком вызовов.
В следующем примере мы определим три функции f main, f levell и f level2, вызывающих друг друга, и используем функцию whereami, которая отображает текущее состояние стека вызовов: function у = fmain ( х ) у = 2 * flevell ( х ) endfunction function у = flevell ( x ) у = 2 * flevel2 ( x ) endfunction function у = flevel2 ( x ) у = 2 * x whereami() endfunction При вызове функции fmain в консоль будет выведено: -->fmain(1) whereami called at line 3 of macro flevel2 flevel2 called at line 2 of macro flevell flevell called at line 2 of macro fmain ans = 8. Как можно видеть, отображается три уровня стека вызовов, соответствующие вызванным функциям. Значения уровней стека вызовов в приведенном примере таковы:
Эти уровни вызова отображаются в составе приглашения Scilab при интерактивной отладке функций с использованием инструкции pause и точек останова. |
|
© vse-o-scilab |