Глобальная и локальная переменная проблема оценки в 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.

Я предполагаю, что у вас есть причина для того, чтобы пройти через строковую форму. Для прямой манипуляции с объектами это обычно не очень хорошая идея.

Другие вопросы по тегам