Call: различия между версиями
Tatikoma (обсуждение | вклад) (Новая страница: « == Описание == Вызывает процедуру созданную по средствам proc. == Синтаксис == Привязка к о...») |
Tatikoma (обсуждение | вклад) |
||
| Строка 5: | Строка 5: | ||
== Синтаксис == | == Синтаксис == | ||
Привязка к окну: опциональна. | Привязка к окну: опциональна. | ||
| − | + | <br>Работа со свернутым окном: да. | |
| − | + | <br>Вызов процедуры: call <имя_процедуры> <передаваемый параметр1> <передаваемый параметр2>...<передаваемый параметрN> | |
| − | + | <br>Тело процедуры: proc <имя процедуры> <переменная для приема параметра1><переменная для приема параметра2>...<переменная для приема параметраN> | |
| − | + | <ваш код> | |
end_proc | end_proc | ||
| Строка 20: | Строка 20: | ||
В этом коде переменные #a и #b будут переданы в процедуру под именами #a1 и #b1. Исходные переменные для процедуры будут невидимы, т.к. она по сути является параллельным независимым скриптом. Для обращения к другим скриптам внутри процедуры и возвращения результата необходимо использовать ссылки на параллельные скрипты: | В этом коде переменные #a и #b будут переданы в процедуру под именами #a1 и #b1. Исходные переменные для процедуры будут невидимы, т.к. она по сути является параллельным независимым скриптом. Для обращения к другим скриптам внутри процедуры и возвращения результата необходимо использовать ссылки на параллельные скрипты: | ||
| − | + | <имя_переменной'''.'''номер_вкладки> | |
#a.3 - сслыка на переменную #a в третьей вкладки скрипта. | #a.3 - сслыка на переменную #a в третьей вкладки скрипта. | ||
Для возвращения результата используйте передачу переменной [[current_script]]. | Для возвращения результата используйте передачу переменной [[current_script]]. | ||
| Строка 83: | Строка 83: | ||
[[Proc]] | [[Proc]] | ||
| − | + | <br>[[Gosub]] | |
| − | + | <br>[[Goto]] | |
== История развития == | == История развития == | ||
'''1.03 beta 4''' | '''1.03 beta 4''' | ||
| − | + | <br>Добавил команды для работы с процедурами | |
| − | call | + | call <имя> - вызов процедуры. Процедура с указанным именем ищется сначала в текущем скрипте, а затем, если не найдена, в "файле процедур" - скрипт с номером 99. загрузить туда что-либо можно с помощью соответствующего пункта меню. Поддерживается вложенный вызов процедур. |
| − | proc | + | proc <имя> - начало процедуры. Процедуры можно располагать в любом месте программы. При обнаружении начала процедуры, автоматически ищется ее конец, и выполнение продолжается со следующей строки. Вложенное описание не поддерживается. |
end_proc - конец процедуры | end_proc - конец процедуры | ||
proc saying_message | proc saying_message | ||
| Строка 101: | Строка 101: | ||
'''2.15''' | '''2.15''' | ||
| − | + | <br>Добавил возможность указывать параметры при вызове процедур. Приём/передача массивов пока не поддерживается: | |
call test #var1 $var2 "any text" word #var3 | call test #var1 $var2 "any text" word #var3 | ||
proc test #var4 $var5 $var6 $var7 $var8. | proc test #var4 $var5 $var6 $var7 $var8. | ||
'''2.20''' | '''2.20''' | ||
| − | + | <br>Исправил вложенный вызов процедур, расположенных в теле родительского скрипта: | |
set logging open 0 0 440 700 | set logging open 0 0 440 700 | ||
set linedelay 0 | set linedelay 0 | ||
| Строка 114: | Строка 114: | ||
wait 1 | wait 1 | ||
set logging on | set logging on | ||
| − | if #a.0 | + | if #a.0 < 20 |
set #a.0 #a.0 + 1 | set #a.0 #a.0 + 1 | ||
call proc | call proc | ||
| Строка 121: | Строка 121: | ||
'''2.28''' | '''2.28''' | ||
| − | + | <br>Добавил возможность передавать в подпрограммы массивы. Следите за соответствием типов переменных | |
передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте. | передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте. | ||
Но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование). | Но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование). | ||
| Строка 144: | Строка 144: | ||
'''2.33''' | '''2.33''' | ||
| − | + | <br>Исправил передачу в подпрограммы переменных, указанных после массива 'call test %a #l' | |
'''2.41''' | '''2.41''' | ||
| − | + | <br>Исправил ошибку "EConvertError '^xx'", где "хх" номер скрипта, иногда возникающую при выполнении процедур. | |
| − | + | <br>Исправил присваивание 'workwindow' в процедурах. Присваивание срабатывало только на вызывающий скрипт. | |
[[Категория:Подпрограммы]] | [[Категория:Подпрограммы]] | ||
Текущая версия на 10:17, 28 августа 2019
Описание
Вызывает процедуру созданную по средствам proc.
Синтаксис
Привязка к окну: опциональна.
Работа со свернутым окном: да.
Вызов процедуры: call <имя_процедуры> <передаваемый параметр1> <передаваемый параметр2>...<передаваемый параметрN>
Тело процедуры: proc <имя процедуры> <переменная для приема параметра1><переменная для приема параметра2>...<переменная для приема параметраN>
<ваш код>
end_proc
set #a 1
set #b 2
call test #a #b
proc test #a1 #b1
msg #a1 #b1
end_proc
В этом коде переменные #a и #b будут переданы в процедуру под именами #a1 и #b1. Исходные переменные для процедуры будут невидимы, т.к. она по сути является параллельным независимым скриптом. Для обращения к другим скриптам внутри процедуры и возвращения результата необходимо использовать ссылки на параллельные скрипты:
<имя_переменной.номер_вкладки> #a.3 - сслыка на переменную #a в третьей вкладки скрипта.
Для возвращения результата используйте передачу переменной current_script.
Примеры
// Пример 1
set #a 10
set #b 13
call plus #a #b //передаём в процедуру 2 переменные
msg $plus //вернули в скрипт результат из процедуры, обратите внимание переменная имеет тоже имя что процедура
End_script
proc plus #x #y
//в процедуре переданные переменные будут с именами #x #y, хотя можно и также было назвать #a #b
set #z #x + #y //сложим эти переменные
set $result #z //присвоим зарезервированной переменной '$result' результат сложения, чтобы вернуть его в скрипт
end_proc
// Пример 2
// Проверяем цвет в точке и время ожидания, если цвет будет отсутствовать 5 секунд будет сообщение об этом
call proverka 351 278 14320907 5000 //передаём в процедуру X Y Color Timeout
if $proverka = 1 //проверяем вышло ли время для ожидания цвета или нет
msg Время вышло, прошло timer мсек //что делать если время вышло
End_script
end_if
msg Цвет найден, прошло timer мсек
End_script
proc proverka #x #y #c #time
while_not #x #y #c //проверяем пока не найдётся нужный цвет
if timer > #time //проверяем не вышло ли время
set $result 1 //если вышло назначаем переменную
break //выходим из while и процедуры
end_if
end_while
end_proc
// Пример 3
set #cfound 0 // переменная для получение результатов поиска
call checkcolor 969, 64 1251183
if #cfound = 1
msg Цвет найден!
else
msg Цвет не обнаружен!
end_if
end_script
// Проверяет в текущем рабочем окне пиксель с координатами #x, #y на соответствие цвету #c.
// Результат: глобальная переменная скрипта #cfound=1, если цвет найден; #cfound=0, если не найден
proc checkcolor #x #y #c
set #cs current_script
set #a findcolor (#x, #y #x, #y 1 1 #c %arr workwindow.#cs )
if #a > 0
set #cfound.#cs 1
else
set #cfound.#cs 0
end_if
end_proc
Смотрите также
История развития
1.03 beta 4
Добавил команды для работы с процедурами
call <имя> - вызов процедуры. Процедура с указанным именем ищется сначала в текущем скрипте, а затем, если не найдена, в "файле процедур" - скрипт с номером 99. загрузить туда что-либо можно с помощью соответствующего пункта меню. Поддерживается вложенный вызов процедур.
proc <имя> - начало процедуры. Процедуры можно располагать в любом месте программы. При обнаружении начала процедуры, автоматически ищется ее конец, и выполнение продолжается со следующей строки. Вложенное описание не поддерживается.
end_proc - конец процедуры
proc saying_message
say test passed
end_proc
call saying_message
end_script
Процесс выполнения процедуры не отображается, параметры пока не передаются.
2.15
Добавил возможность указывать параметры при вызове процедур. Приём/передача массивов пока не поддерживается:
call test #var1 $var2 "any text" word #var3 proc test #var4 $var5 $var6 $var7 $var8.
2.20
Исправил вложенный вызов процедур, расположенных в теле родительского скрипта:
set logging open 0 0 440 700
set linedelay 0
set #a 0
call proc
proc proc
wait 1
set logging on
if #a.0 < 20
set #a.0 #a.0 + 1
call proc
end_if
end_proc
2.28
Добавил возможность передавать в подпрограммы массивы. Следите за соответствием типов переменных
передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте.
Но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование).
set %var [1 1] abc set %var [1 2] 123 set #e 1 set delimiter '_' call test2 %var [1 2] %var [#e] %var %var.5 end_script proc test2 #v1 $v2 %v3 %v4 set delimiter '^' set logging Dump: #v1 $v2 %v3 [1] %v4 [1] // Dump: 123 abc_123 abc^123 abc^123 end_proc
Добавил возврат строкового значения из подпрограммы, с помощью зарезервированной переменной '$result'. При выходе из подпрограммы по ключевому слову 'end_proc', значение переменной '$result' присваивается строковой переменной с именем подпрограммы.
call test msg $test end_script proc test set $result Test Passed end_proc
2.33
Исправил передачу в подпрограммы переменных, указанных после массива 'call test %a #l'
2.41
Исправил ошибку "EConvertError '^xx'", где "хх" номер скрипта, иногда возникающую при выполнении процедур.
Исправил присваивание 'workwindow' в процедурах. Присваивание срабатывало только на вызывающий скрипт.