Страница 2 из 2
Re: передать параметры от одного скрипта другому
Добавлено: 07 дек 2023, 18:34
-13-
set еще имеет преимущество перед local, переменную можно дернуть из функции, а local работает только внутри последней, если ничего не позабыл, практики маловато в последнее время
Re: передать параметры от одного скрипта другому
Добавлено: 07 дек 2023, 21:38
Sertik
Дорогой - 13 - !
Ну что же Вы меня путаете то:
У Вас стоит строка:
:global fnParse do={:parse [/system script get $script source]}
где же Вы тут видите мою с двойным парсингом !:
[[:parse "[:parse [/system script get $scrName source]] $Var]"]]
У Вас совем другое - Вы просто создаете функцию из тела скрипта и всё. Это не передача параметров от одного скрипта другому налету. Совсем не о том в посте речь идет.
Re: передать параметры от одного скрипта другому
Добавлено: 07 дек 2023, 21:41
Sertik
Код: Выделить всё
# простая передача параметров скрипту и запуск его (параметр любого типа будет превращен в строку)
[[:parse "[:parse [/system script get $msgTxt source]] $Variable"]]
# или то же самое, но при многопоточности c передачей параметров
:local scriptRun "[[:parse [system script get $calledFunctionName source]] ID=$queryID ChatID=$queryChatID]"
:execute script=$scriptRun
# или в одну строку из скрипта
:execute script="[[:parse [system script get $calledFunctionName source]] ID=$queryID ChatID=$queryChatID]"
# из файла
:execute script="[[:parse [/file get $FileName content]] ID=$queryID ChatID=$queryChatID]"
Код: Выделить всё
# передача параметров любого типа кроме массивов
# если текст даже ТОЛЬКО ЛАТИНСКИЙ, НО СОДЕРЖИТ ПРОБЕЛЫ ИЛИ СПЕЦ СИМФОЛЫ -
# то он всё равно должен быть экранирован !
:local Var1 "\"Hello Пользователь\""
:local Var2 "12"
:local Var3 14
:local Var4 192.168.0.1
:local Var5 [/system clock get time]
:log info ("$Var1"." $[:typeof $Var1]")
:log info ("$Var2"." $[:typeof $Var2]")
:log info ("$Var3"." $[:typeof $Var3]")
:log info ("$Var4"." $[:typeof $Var4]")
:log info ("$Var5"." $[:typeof $Var5]")
[[:parse "[:parse [/system script get $scrName source]] Par1=[:to$[:typeof $Var1] $Var1] [:to$[:typeof $Var2] $Var2] [:to$[:typeof $Var3] $Var3] [:to$[:typeof $Var4] $Var4] [:to$[:typeof $Var5] $Var5]"]]
# или в фоне
:execute script="[[:parse "[:parse [/system script get $scrName source]] Par1=[:to$[:typeof $Var1] $Var1] [:to$[:typeof $Var2] $Var2] [:to$[:typeof $Var3] $Var3] [:to$[:typeof $Var4] $Var4] [:to$[:typeof $Var5] $Var5]"]]"
либо, чтобы не экранировать строковые данные можно пользоваться моей микрофункцией экранирования параметров:
Код: Выделить всё
:local Shield do={
:if ([:typeof $1]="array") do={
:return "\"the array cannot be passed\""}
:if ([:typeof $1]="str") do={
:return "\"$1\""} \
else={ \
:return $1}
}
Тогда строковый параметр можно задавать без экранирования, как обычно, но пропускать сразу через Shield:
:local Var1 [$Shield "Hello Пользователь"]
а потом вызывать передачу.