M
morpheus
Функция Execute шикарная вещь при правильном применении.
Вы только вчитайтесь в описание
Синтаксис:
Execute ( text )
где text - собственно и есть запускаеммый скрипт
попробуйте запустить этот код
Ну чтож теперь попробуем более сложный код, в котором сдержиться более одной строки
Имейте в виду что символы перехода строки используються для разделения строк в переменной strCode
Как видите оба примера делают одно и тоже - показывают окно с соощением "Это динамическая библиотека".
Я думаю теперь суть функции Execute должна быть Вам ясна. Далее попытаемся продемонстрировать Вам возможность использования этой функции в приложениях
Работа с динамическими классами
В ниже приведённом примере некоторые переменные и процедуры загружены из другого модуля
Этот динамический код загружает библиотеку ArrayManager и экземпляр класса ArrayManager. Фишка в том что в 4й строке мы динамически подгружаем модуль. Таким образом в режиме runtime мы можем программно решать - подгружать модули или нет. Эта техника называеться Динамическая загрузка классов ( Dynamic Class Loading ). Этот метод хорошо использовать с точки зрения оптимизации - мы подгружаем только те модули которые будем использовать, ничего лишнего.
Конечо же эта техника не новая. Я лично пользуюсь ею(поисковая система). Можете прочитать про эту технику
Теперь я думаю пора привести более сложный пример
Теперь как Вы видите - все динамическое: подгружаеммый модуль, имя запускаеммой функции, параметр для функции. Прошу обратить внимание на две верхние строки. они позволяют нам обьединять переменные для статического и динамического кода. ВАЖНО это будет работать только с глобальными декларациями, имено потому strReturnVal задекларированно в самом верху!
Канечно, приведённые выше примеры слишком просты, но я думаю суть фунции Execute у меня получилось Вам передать.
от себя отмечу что интересным есть то что возвратит нам фунция Execute
Return value
- код который идет за End
- или 0, если в код не был включен End, или End ничего не вернул.
Пример
Как видим в данном динамическом коде присутствуют End -2 и End -3. В зависимости от значения retcode наш MessageBox выведет нам одну из надписей про позитив или негатив
Вы только вчитайтесь в описание
компиляции и запуска и выгрузки целых динамических библиотекLotusScript considers text a separate script, compiling and executing it as a temporary module that's unloaded as soon as execution finishes.
Синтаксис:
Execute ( text )
где text - собственно и есть запускаеммый скрипт
Код:
Sub Initialize
Dim strCode As String
strCode = { MsgBox "Это динамическая библиотека" }
Execute( strCode )
End Sub
Ну чтож теперь попробуем более сложный код, в котором сдержиться более одной строки
Код:
Sub Initialize
Dim strCode As String
strCode = {
Dim strMessage as String
strMessage = "Это динамическая библиотека"
msgbox strMessage
}
Execute( strCode )
End Sub
Как видите оба примера делают одно и тоже - показывают окно с соощением "Это динамическая библиотека".
Я думаю теперь суть функции Execute должна быть Вам ясна. Далее попытаемся продемонстрировать Вам возможность использования этой функции в приложениях
Работа с динамическими классами
В ниже приведённом примере некоторые переменные и процедуры загружены из другого модуля
Код:
Sub Initialize
Dim strCode as String
strCode = {
Use "libArrayManager"
Dim AM as ArrayManager
Set AM = new ArrayManager()
}
Execute strCode
End Sub
Этот динамический код загружает библиотеку ArrayManager и экземпляр класса ArrayManager. Фишка в том что в 4й строке мы динамически подгружаем модуль. Таким образом в режиме runtime мы можем программно решать - подгружать модули или нет. Эта техника называеться Динамическая загрузка классов ( Dynamic Class Loading ). Этот метод хорошо использовать с точки зрения оптимизации - мы подгружаем только те модули которые будем использовать, ничего лишнего.
Конечо же эта техника не новая. Я лично пользуюсь ею(поисковая система). Можете прочитать про эту технику
Ссылка скрыта от гостей
Теперь я думаю пора привести более сложный пример
Код:
Declarations
Dim strReturnVal as String
Sub Initialize
Dim strCode as String
Dim strModule as String
Dim strFunction as String
Dim strParam as String
strModule = "libUser"
strFunction = "getCountry"
strParam = "Orky Dorky"
strCode = |
Use | & strModule & |
strReturnVal = | & strFunction & |(| & strParam & |)|
Execute strCode
Msgbox strReturnVal
End Sub
Теперь как Вы видите - все динамическое: подгружаеммый модуль, имя запускаеммой функции, параметр для функции. Прошу обратить внимание на две верхние строки. они позволяют нам обьединять переменные для статического и динамического кода. ВАЖНО это будет работать только с глобальными декларациями, имено потому strReturnVal задекларированно в самом верху!
Канечно, приведённые выше примеры слишком просты, но я думаю суть фунции Execute у меня получилось Вам передать.
от себя отмечу что интересным есть то что возвратит нам фунция Execute
Return value
как видитеThe Execute function returns one of the following values:
The return code of an End statement, if one was executed.
Zero (0), if no End statement was executed, or if the executed End statement had no return value.
- код который идет за End
- или 0, если в код не был включен End, или End ничего не вернул.
Пример
Код:
Sub ComputeInterest
Dim script As String, calc As String, retcode As Integer
calc$ = InputBox("Compute loan interest (charge/loan)")
script$ = _
|Option Declare
Sub Initialize
Dim pct As Single
pct! = | & calc$ & |
If pct! < 0 Then
End -2 ' -2 is a status code.
ElseIf pct! > 1 Then
End -3 ' -3 is a status code.
End If
MessageBox("Interest is " & Format(pct!,"percent"))
End Sub|
retcode% = Execute (script$)
If retcode% = -2 Then
MessageBox("You computed a negative interest rate!")
ElseIf retcode% = -3 Then
MessageBox("You computed an excessive interest rate!")
End If
End Sub
Ссылка скрыта от гостей