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

Поддержка
  • @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"