Переменные в имени переменных



  • Привет! Кто знает, можно ли как-то использовать переменные в имени переменных? Например нужно создать глобальную переменную - в названии номером потока и имя - [[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"
    

Log in to reply