Инструменты пользователя

Инструменты сайта


Боковая панель

help:dynamical

Назад: Служебные локации

Динамический код

  • DYNAMIC [$код],[параметр 1],[параметр 2], … - выполняет код, указанный в виде строки текста. Выполнение кода [$код] здесь аналогично оператору GS:
    • Код, переданный оператору dynamic, выполняется в виде отдельного блока кода, в который можно передавать параметры (аргументы).
    • Переданные параметры хранятся в массиве ARGS. Максимальное количество параметров - 91).
    • После выполнения старые параметры ARGS восстанавливаются. То есть внутри выполняемого кода dynamic используется свой собственный массив ARGS, его значения не пересекаются со значениями ARGS на локации, из которой dynamic был вызван.
    • Затем продолжается выполнения программы со следующей команды после dynamic.
    • Примеры:
      DYNAMIC '$a="string<<$b>>"'
      DYNAMIC '$a'
      DYNAMIC 'if $a="string":''text!'''
      DYNAMIC "
      $args[0]
      addobj $args[1]
      ",'Вы взяли вилку.','Вилка'
      
  • DYNEVAL([$код],[параметр 1],[параметр 2], …) - выполняет код, указанный в виде строки текста, с получением результата. Выполнение кода [$код] здесь аналогично оператору FUNC:
    • Код, переданный функции dyneval, выполняется в виде отдельного блока кода, в который можно передавать параметры (аргументы).
    • Переданные параметры хранятся в массиве ARGS. Максимальное количество параметров - 92).
    • Результат функции равен значению $RESULT при возврате строкового значения, или RESULT при возврате числового значения.
    • Если при выполнении кода были установлены и RESULT, и $RESULT, то предпочтение отдаётся строковому значению.
    • После выполнения кода предыдущие значения ARGS и RESULT восстанавливаются. То есть внутри выполняемого кода dyneval используется свои собственные массивы ARGS и RESULT, и их значения не пересекаются со значениями ARGS и RESULT на локации, из которой dyneval был вызван.
    • Внимание: при использовании в коде [$код] операторов GS/DYNAMIC переменные RESULT и $RESULT могут перезаписываться кодом, выполняемым этими операторами.
      • Исправлено в более новых версиях интерпретатора.
    • Примеры:
      DYNEVAL('result = 3+4')
      PL DYNEVAL('$result = mid("abcd",2,1)+"qwerty"')
      PL DYNEVAL($test + ' + val("<<$test>>")')
      проход=DYNEVAL("result = ($args[0] <> 'текст')", 'строка')
      
  • Важно: если код задан с помощью одинарных (' ') или двойных (" ") кавычек, в тексте вычисляются подвыражения.
    • Пример:
      $args[0]='qwerty'
      $code = '
      *pl "<<$args[0]>>"
      *pl $args[0]'
      $args[0]='12345'
      
      DYNAMIC $code,'asdfg'
      ! при задании переменной $code будет вычислено подвыражение
      ! поэтому первой строкой выведется 'qwerty'
      ! второй строкой выведется 'asdfg'
      
  • Фигурные скобки - третий вид кавычек используемый специально для написания динамического кода
    • Поддерживается вложенность скобок
    • Перед выполнением кода не вычисляются подвыражения.
    • Примеры:
      $args[0]='qwerty'
      $code = {
        *pl "<<$args[0]>>"
        *pl $args[0]
      }
      
      DYNAMIC $code,'asdfg'
      ! будет выведено две строки 'asdfg'
      
  • Вполне допустимо использовать dynamic/dyneval внутри dynamic/dyneval, однако это сильно усложняет отладку кода и поиск ошибок.

Вперёд: Основное окно описания

1) , 2) 10 включая код
help/dynamical.txt · Последние изменения: 2022/05/19 08:14 — aleks_versus