Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: arma on October 24, 2021, 04:24:14 AM
-
Каким образом передать массив в подпрограмму?
Псевдокод того что хотелось бы:
define($array1)
define($array2)
//как-то заполняем оба массива
my_subr_process($array1) //обрабатываем первый массив
my_subr_process($array2) //той же процедурой обрабатываем второй массив
my_print($array1)
my_print($array2)
Насколько я понимаю, в подпрограммы параметрами передавать можно только элементарные типы. А если указать массив, передаётся первый элемент.
Можно было бы передать массив через глобальную переменную, но тогда перед вызовом надо скопировать в эту переменную, а потом копировать обратно. Выглядит тяжеловато, особенно если вызываемая подпрограмма - однострочник.
-
Только поэлементным копированием в цикле, потому что в КМ массивы - динамические. При копировании теряется размер массива и все элементы после первого.
В КМ нет локальных переменных. Все переменные глобальны, из-за этого приходиться для каждого потока делать свою подпрограмму с уникальными названиями. Или делать так чтобы запуск подпрограммы не пересекался во времени в разных потоках
-
Если делать передачу через глобальные переменные, возможно ли сделать переименование переменной или ссылку на переменную?
Например в основной программе у меня $array, а в подпрограмме $subr_array:
rename_variable($array,$subr_array)
my_subr_process()
rename_variable($subr_array,$array)
или$subr_array=link_to_variable($array)
my_subr_process()
unlink($subr_array)
-
Нет такого функционала.
-
В v4.14.003 есть ARRCONCAT. Смотрите в справке как он работает. Как раз для таких случаев.