Переменные с одинаковым именем в разных задачах

Обсуждение программ nnCron и nnCron LITE

Переменные с одинаковым именем в разных задачах

Postby AleXH » Thu, 12 Mar 2015, 11:08

Code: Select all
#( 1st
SingleInstance
NoLog
AsLoggedUser
LoadProfile
Time: 20 10-22/4 * * * *
: MyFile S" C:\Temp\1st.zip" ;
Action:
  StartIn: "C:\Temp"
  ShowMinimized NormalPriority
  START-APPW: C:\Lua5\lua5.1.exe C:\Lua5\1st.lua
  FILE-CHANGE: "%MyFile%"
  IF
    TQUERY: "Open new 1st.zip?" 5 No
    0<> IF MyFile START-APP THEN
  THEN
)#

#( 2nd
SingleInstance
NoLog
AsLoggedUser
LoadProfile
Time: 25 10-22/4 * * * *
: MyFile S" C:\Temp\2nd.zip" ;
Action:
  StartIn: "C:\Temp"
  ShowMinimized NormalPriority
  START-APPW: C:\Lua5\lua5.1.exe C:\Lua5\2nd.lua
  FILE-CHANGE: "%MyFile%"
  IF
    TQUERY: "Open new 2nd.zip?" 5 No
    0<> IF MyFile START-APP THEN
  THEN
)#

1st.lua, 2nd.lua скачивают 1st.zip, 2nd.zip и сохраняют их в C:\Temp. Атрибуты у обоих файлов Change time, Last write time содержат время последнего сохранения (перезаписи).

Вопрос. Почему у 1st задачи TQUERY показывает диалог, а у 2nd - нет? - %MyFile% во второй задаче по прежнему имеет значение из первой? Если да, то разве это правильно?
Last edited by VoidVolker on Thu, 12 Mar 2015, 11:59, edited 1 time in total.
Reason: Для кода следует использовать bb-тег code
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Переменные с одинаковым именем в разных задачах

Postby VoidVolker » Thu, 12 Mar 2015, 11:57

Code: Select all
: MyFile S" C:\Temp\1st.zip" ;
...
: MyFile S" C:\Temp\2st.zip" ;

Смотрим названия слов - они одинаковые. А пространство имен - глобальное. Далее, используется слово:
Code: Select all
FILE-CHANGE: "%MyFile%

Код между знаками процента выполняется в рантайме. Т.е. подстроке просто делается EVALUATE. А слово-то уже перезаписано (на самом деле оба слова в словаре, но поиск останавливается на последнем добавленном). И как результат в первой задаче во время выполнения будет значение ...\2st.zip. Поэтому либо используем словари либо даем словам, переменным, задачам и другим объектам уникальные имена.
Или не используем выполнение кода в подстроках:
Code: Select all
MyFile FILE-CHANGE
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Переменные с одинаковым именем в разных задачах

Postby AleXH » Thu, 12 Mar 2015, 12:22

А разве не правильно было бы запилить движок крона так, чтобы глобальные переменные объявлять вне задач, а локальные, определённые в задаче, переинициализировать каждый раз при вызове задачи?
Last edited by AleXH on Thu, 12 Mar 2015, 12:30, edited 1 time in total.
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Переменные с одинаковым именем в разных задачах

Postby VoidVolker » Thu, 12 Mar 2015, 12:29

Можно и так. Например:
Code: Select all
VARIABLE my-var

Задача 1:
Code: Select all
123 my-var !

Задача 2:
Code: Select all
456 my-var !


Или так:
Code: Select all
USER my-var

Задача 1:
Code: Select all
123 my-var !

Задача 2:
Code: Select all
456 my-var !
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Переменные с одинаковым именем в разных задачах

Postby AleXH » Thu, 12 Mar 2015, 12:37

Да, но это для чисел, а как быть со стрингами?
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Переменные с одинаковым именем в разных задачах

Postby VoidVolker » Thu, 12 Mar 2015, 12:37

А разве не правильно было бы запилить движок крона так, чтобы глобальные переменные объявлять вне задач, а локальные, определённые в задаче, переинициализировать каждый раз при вызове задачи?

Эмм... Именно так все и устроено. Читаем мануал: Работа с программой > Работа с переменными, константами и массивами > Зона видимости переменных, констант и массивов.
Просто в форте все внутренности открыты для пользователя. Хочешь объявлять глобальные переменные в задаче - объявляй. Хочешь локальные - используй локальные. Здесь никто ничего не запрещает.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Переменные с одинаковым именем в разных задачах

Postby VoidVolker » Thu, 12 Mar 2015, 12:39

Code: Select all
USER-CREATE var2 256 USER-ALLOT
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Переменные с одинаковым именем в разных задачах

Postby AleXH » Thu, 12 Mar 2015, 12:42

Спасибо, теперь понятно.
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 4 guests