Глобальная и локальная переменная проблема оценки в Maple
Почему-то код Maple
testproc := proc()
LOCAL abc;
abc[1] := 123;
print(eval(parse(cat("abc[", 1, "]"))))
end proc
testproc();
производит
abc_1
тогда как (то же самое, но с abc теперь GLOBAL переменная)
testproc := proc()
GLOBAL abc;
abc[1] := 123;
print(eval(parse(cat("abc[", 1, "]"))))
end proc
производит (что я хочу)
123
Что мне нужно сделать, чтобы я мог оценить каскадную строку с локальной переменной? Большое спасибо за любую помощь!:)
1 ответ
Решение
Когда вы используете синтаксический анализ, он работает так, как если бы текст был в собственном файле или введен на верхнем уровне. Он не имеет контекста лексически ограниченных переменных.
Вы могли бы сделать что-то вроде
eval(parse(cat("abc[",1,"]")),convert('abc',`global`)='abc');
Если вы хотите обрабатывать несколько локальных объектов, используйте набор для второго аргумента eval.
Я предполагаю, что у вас есть причина для того, чтобы пройти через строковую форму. Для прямой манипуляции с объектами это обычно не очень хорошая идея.