Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

1.6. В чём разница между `dynamic` и `dyneval`?

В: В чём разница между `dynamic` и `dyneval`?

О:

И `dynamic`, и `dyneval` выполняют код, который мы передаём им в виде текста. Однако разница есть. И она заключается в том, что `dynamic` — это оператор, а `dyneval` — это функция. Функция умеет `возвращать` результат. Сравните работу этих двух команд:

dynamic "result=1 & act 'Прибавить единицу (0)': dyn=dyn+1"
dyneval("result=2 & act 'Прибавить единицу (1)': dyn=dyn+1")

Первая просто выведет действие в окно действий, а вторая выведет действие, и число `2` на экран. Потому что результатом работы этой функции в данном случае станет `2`.

Чтобы воспользоваться возможностями `dyneval`, следует в конце вычислений присвоить результат переменной `result`:

dyneval("result=500*13/45")

Подобно `gosub` и `func`, `dynamic` и `dyneval` работают с аргументами:

dynamic "hp=hp+args[0]
if hp>hp_max:
    hp=hp_max
elseif hp<0:
    hp=0
end"
,23

dyneval("result=1
:for
if args[1]>0:
    result=result*args[0]
    args[1]-=1
    jump 'for'
end"
,57,3)

Если переданный в `dyneval` код не содержит переменную `$result` (ей не присваивается значение), при использовании неявного оператора такая функция `dyneval` будет работать, как оператор `dynamic`.

"Первая строка"
dyneval("HP=HP+34")
"Последняя строка"