Перейти к основному содержимому

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")
"Последняя строка"