Страница 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 Пользователь"]

а потом вызывать передачу.