Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
1.6. В чём разница между `dynamic` и `dyneval`?
В: В чём разница между `dynamic` и `dyneval`?
О:
И `dynamic`, и `dyneval` выполняют код, который мы передаём им в виде текста. Однако разница есть. И она заключается в том, что `dynamic` — это оператор, а `dyneval` — это функция. Функция умеет `возвращать` результат. Сравните работу этих двух команд:
Первая просто выведет действие в окно действий, а вторая выведет действие, и число `2` на экран. Потому что результатом работы этой функции в данном случае станет `2`.
Чтобы воспользоваться возможностями `dyneval`, следует в конце вычислений присвоить результат переменной `result`:
Подобно `gosub` и `func`, `dynamic` и `dyneval` работают с аргументами:
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")
"Последняя строка"