Переменные в имени переменных
-
Привет! Кто знает, можно ли как-то использовать переменные в имени переменных? Например нужно создать глобальную переменную - в названии номером потока и имя - [[THREAD_INDEX]]-[[NAME]]
Стандартно есть возможность ставить только из доступных по 1 штуке. Может как-то через Выполнить код? Спасибо!
-
@gaget007, можно сначала в другую переменную записать все нужные переменные, например.
-
@Antonio Мне нужно имя переменной с номером потока, а не содержимое переменной
-
@gaget007 , ну так я предлагаю в переменную 1 записать нужное имя и номер потока, потом назвать переменную 2 тем, что записано в переменную 1.
-
@Antonio, а , я понял, что имеется ввиду. Да, тут только кодом создавать переменную нужно (если вообще так можно).
-
Через выполнить код вроде можно такое сделать. Попробуй так:
PSet("basglobal", VAR_ THREAD_INDEX + "-" + VAR_NAME , val)
-
А как создать не глобальную, а просто локальную динамическую переменную, в плане с динамическим именем, если у нас скажем объявлен
[[RANDOM STRING]] со случайно строкой
и я хочу переменную с именем типа [[FOLDER]]+[[RANDOM_STRING]], даже лучше [[FOLDER]]+[[THREAD_INDEX]]Почему при объявлении переменных нельзя использовать экспрешен? Реально голову можно сломать...
-
@seoshnek, можно же использовать массив (в BAS он называются списком) или объект для этих целей.
-
@GhostZ Не совсем понимаю, извините.в БАС список - это одномерный массив - как мне получить его свойства?
-
@seoshnek Вы можете использовать js объекты, через выполнить код
-
@UserTrue а как мне через js создать переменную БАС? с уникальным идентификатором (учитывая эти скобочки, экранировать их?)
-
@seoshnek, для чего вам нужна переменна с случайным названием?
Можно создать список стандартным действием и стандартными действиями или через выполнить код менять его содержимое так как вам нужно.
-
@GhostZ Мне нужна такая динамическая переменная, чтобы не было пересечений во многопотоке. Если даже будет не случайная а просто VAR+thread_index - меня и так устроит. Но я не понимаю, как сконкатенировать)
-
@seoshnek, а какие могут быть пересечения если у каждого потока свои переменные?
-
@GhostZ В моем случае эта переменная - имя папки, чтобы сохраняемые и загружаемые оттуда файлы не пересекались и не путались.
-
@seoshnek said in Переменные в имени переменных:
@GhostZ Мне нужна такая динамическая переменная, чтобы не было пересечений во многопотоке. Если даже будет не случайная а просто VAR+thread_index - меня и так устроит. Но я не понимаю, как сконкатенировать)
eval("VAR_" + VAR_THREAD_INDEX + "= 'HELLO'" )
-
@seoshnek, все равно не понимаю зачем этой переменной случайное название, между потоками работают только глобальные переменные. Вам просто нужно установить значение переменной в зависимости от потока.
Например:[[FOLDER]] = "C:/folder" + [[THREAD_INDEX]] //"C:/folder1"
-
@Fox Спасибо. А что должно произойти после выполнения этого кода? Ничего не происходит. Или эту конструкцию нужно присваивать к чему-то?
-
@GhostZ Я что-то затупил, да. Похоже, ваш вариант - то, что надо, спасибо. Изначально хотел создавать случайную папку, писать туда, потом удалять её.
Вспомнил зачем: у меня изначально к random_string были привязаны и другие данные по имени, поэтому я так искал решение. Впрочем, уже не важно)
-
Ну и если нужно название из переменной то можно использовать js объекты.
VAR_OBJ = {}; VAR_TEST = "file"; VAR_OBJ[VAR_TEST] = "test1"; VAR_TEST = "folder"; VAR_OBJ[VAR_TEST] = "test2"; VAR_OBJ.file или VAR_OBJ["file"] или VAR_OBJ[VAR_TEST] (где VAR_TEST равна "file") //"test1" VAR_OBJ.folder //"test2"
Или массив если в переменной число.
VAR_ARR = []; VAR_THREAD_INDEX = 1; VAR_ARR[VAR_THREAD_INDEX] = "test1"; VAR_THREAD_INDEX = 2; VAR_ARR[VAR_THREAD_INDEX] = "test2"; VAR_ARR[1] или VAR_ARR[VAR_THREAD_INDEX] (где VAR_THREAD_INDEX равна 1) //"test1" VAR_ARR[2] //"test2"