проблема при вызове функции

Поддержка
  • вот нигде про это не говорится, ни в одном видео обучающем в инете. Да сам уже докопался, изменил названия меток внутри функции_2 и заработало.

  • @helper00700 said in проблема при вызове функции:

    вот нигде про это не говорится, ни в одном видео обучающем в инете

    Да как бы логично, что не должно быть одинаковых названий. Это как одинаковые адреса в городе.

  • @UserTrue said in проблема при вызове функции:

    Да как бы логично, что не должно быть одинаковых названий. Это как одинаковые адреса в городе.

    Область действия меток - весь скрипт. Можно же предположить, что область действия - отдельная функция?

  • @smeckoi77 said in проблема при вызове функции:

    Область действия меток - весь скрипт. Можно же предположить, что область действия - отдельная функция?

    Чего ? Предположить можно что угодно. Я вообще не использую метки

  • @smeckoi77 said in проблема при вызове функции:

    Можно же предположить, что область действия - отдельная функция?

    Я, кстати, тоже считал, что метки имеют локальную область видимости(функция), а не глобальную(весь скрипт).

    Но я не использую метки и не советую никому. Метки - это самый легкий способ выстрелить себе в ногу.

  • @sergerdn тоже стараюсь свести их использование к минимуму

  • @sergerdn said in проблема при вызове функции:

    Я, кстати, тоже считал, что метки имеют локальную область видимости(функция), а не глобальную(весь скрипт).

    В бас вообще нет такого понятия как область видимости

  • @UserTrue said in проблема при вызове функции:

    В бас вообще нет такого понятия как область видимости

    Не согласен, но холивар разводить не буду.

  • @sergerdn said in проблема при вызове функции:

    Не согласен, но холивар разводить не буду.

    Аха, отличный аргумент. Вы экстрапалируете свои представления и ожидания с другим платформ/языков на БАС и потом удивляетесь, что в бас это так не работает, но в бас нигда не заявлено что в нем это должно работать подобным образом.

  • @UserTrue said in проблема при вызове функции:

    Аха, отличный аргумент.

    Вероятно, я имею право иногда высказывать свое мнение без аргументации.

    @UserTrue said in проблема при вызове функции:

    ... что в бас это так не работает.

    В режиме записи область видимости переменных глобальная, а в режиме запуска - локальная.

    Метки в браузере имеют глобальную область видимости.

  • @sergerdn said in проблема при вызове функции:

    В режиме записи область видимости переменных глобальная, а в режиме запуска - локальная.

    Это тоже не верно в режиме записи работает только один поток, область видимости всегда в рамках потоках.
    Что касается функции onApplicationStart то в запуске она тоже исполняется в отдельном потоке до запуска остальных функции, а в записи она исполняется в этом же потоке что и остальной код, это единственный нюанс который тут есть

    А что за метки в браузере я не знаю

  • @UserTrue said in проблема при вызове функции:

    Это тоже не верно в режиме записи работает только один поток, область видимости всегда в рамках потоках.

    Переменные меняют область видимости при:

    • запуск в режиме записи(глобально по отношению к функциям)
    • запуск в один поток (локально по отношению к функциям)

    А есть еще отдельная глобальная область видимости для глобальных переменных. А еще есть область видимости ресурсов(глобальная).

    Честно говоря не совсем понимаю, что ты так уцепился за мое мнение, что в BAS есть область видимости переменных.

  • @sergerdn said in проблема при вызове функции:

    Честно говоря не совсем понимаю, что ты так уцепился за мое мнение, что в BAS есть область видимости переменных.

    Потому что ее нет)) Глобальные переменные если только, но разговор был про области видимости функций.

    Потом не удивляетесь что бас работает не так как вы думали xD

  • @UserTrue said in проблема при вызове функции:

    Потому что ее нет)) Глобальные переменные если только, но разговор был про области видимости функций.

    Глобальные переменные это и есть область видимости.

    @UserTrue said in проблема при вызове функции:

    В бас вообще нет такого понятия как область видимости

    Я отвечал на это утверждение. Что, как минимум, существует область видимости в разрезе переменных и ресурсов, что тоже, впрочем переменные. Еще и метки, предположительно, всегда имеют глобальную область видимости.

    Вероятно, ты имел в виду, что в BAS нет понятия область видимости функций. Мое мнение, что она есть и она всегда глобальная. Из любого места можно всегда вызвать любую функцию.

    @UserTrue said in проблема при вызове функции:

    Потом не удивляетесь что бас работает не так как вы думали xD

    Безусловно, все мы люди и все мы ошибаемся. И никто не исключение.

    Но почему ты взял на себя миссию в это топике обязательно меня убедить, что твое мнение должно совпадать с моим - мне не понятно.

    Так как каждый человек имеет право на свое, пусть даже иногда и ошибочное, мнение.

  • @sergerdn said in проблема при вызове функции:

    Я отвечал на это утверждение. Что, как минимум, существует область видимости в разрезе переменных и ресурсов, что тоже, впрочем переменные

    Область видимости это как правило в первую очередь область видимости функции и процедур, затем циклов и условий, а также блоков.
    Глобальные переменные это скорее частный случай уровня всего приложения. Что касается ресурсов то это вообще просто API для синхронной работы с общими данными. С тем же успехом можно назвать базу данных глобальной областью видимости.

    Мое мнение, что она есть и она всегда глобальная
    Глобальная область видимости подразумевает наличие локальной, которой в БАС в сущности нет.

    Но почему ты взял на себя миссию в это топике обязательно меня убедить,

    Нет у меня никакой миссии и философствовать на эти темы я не стану. Форум он то форум, что это место для дискуссий.

  • @UserTrue said in проблема при вызове функции:

    Кроме того глобальная область видимости подразумевает наличие локальной, которой в БАС в сущности нет.

    Вероятно, все таки есть локальная область видимости переменных.

    Переменная, созданная внутри функции, видна только внутри функции, если это не режим записи в BAS.
    Иначе говоря такая переменная имеет свою локальную(внутри функции) область видимости.

    Такая переменная, вероятно, уничтожается движком BAS, когда функция заканчивает работу. Уничтожений переменных внутри функции только предположение, настолько в исходники я не погружался.

  • @sergerdn said in проблема при вызове функции:

    Переменная, созданная внутри функции, видна только внутри функции, если это не режим записи в BAS.
    Иначе говоря такая переменная имеет свою локальную(внутри функции) область видимости.

    Если эта функция не асинхронная, которая в сущности является другим потоком, то область ее видимости так же весь поток

  • Какой то странный у вас получился спор.. Локальные переменные BAS видны в любых функциях в пределах одного потока, переменные js ограничены функцией в которой были объявлены.

    Вот тестовый скрипт: 2808.xml

    В нём есть функция "q" в которой объявляется переменная BAS [[NEW_VARIABLE]] и переменная js test. Обе переменные выводятся в лог для проверки:

    9478ccf7-f688-4dc1-9274-55de1b65f1aa-изображение.png

    В функции "Main" стоит вызов функции "q" и также вывод в лог обеих переменных:

    42a4507b-0817-4271-8d5c-a508bc191702-изображение.png


    В режиме "записи" логи в функции "q" и функции "Main" отработают корректно:

    f73f049e-4d28-4631-9f72-a3b1ed8d0ff3-изображение.png

    В режиме "запуска" в функции "q" сработают корректно оба лога, однако в функции "Main" корректно сработает вывод в лог только переменной BAS. Вывод переменной js вернёт ошибку:

    6c49be2e-0e19-4c3e-8ca2-1d75f4fcbbc8-изображение.png

    Однако если в переменной js убрать "var", то эта переменная также будет корректно видна в функции "Main"

    8b216017-c602-455a-a6d1-419850ef141a-изображение.png

    4e5e3a6c-cb62-4939-bcab-af2ed166f04d-изображение.png

    То есть технически переменные BAS это глобальные переменные js - [[NEW_VARIABLE]] === VAR_NEW_VARIABLE

  • @UserTrue said in проблема при вызове функции:

    Если эта функция не асинхронная

    Вероятно, у нас все таки отличия в трактовке терминов.

    Когда я пишу функция - я имею в виду функцию, которую можно создать в IDE BAS, а не какие функции у себя BAS вызывает под капотом.

    Я всегда считал, что такая функция в BAS не может быть синхронной или асинхронной, а может быть разным способ вызова функции - с ожиданием результата в том же потоке или запуске в фоне/не блокирующем основной поток режиме.

    Может быть, что способ запуска функции, меняет область видимости переменных. Этот момент мне не известен.

    Тут можно сделать вывод, что все таки, если что-то меняется, значит оно существует 😄