【问题标题】:Global vs local variable valuation issue in MapleMaple 中的全局与局部变量估值问题
【发布时间】:2023-03-16 16:45:01
【问题描述】:

由于某种原因,Maple 代码

testproc := proc()
  LOCAL abc;
  abc[1] := 123;
  print(eval(parse(cat("abc[", 1, "]"))))
end proc

testproc();

生产

abc_1

而(相同,但现在 abc 是一个全局变量)

testproc := proc()
  GLOBAL abc;
  abc[1] := 123;
  print(eval(parse(cat("abc[", 1, "]"))))
end proc

生产(我想要的)

123

我需要做什么才能评估包含局部变量的串联字符串?非常感谢您的帮助! :)

【问题讨论】:

  • 这是什么语言?
  • 没错;连接产生一个全局名称。您很可能在问如何实现一种可疑的方法......这可能会以另一种方式更好地完成。你为什么要这样做?这不仅仅是索引名称,对吧?您是否明确声明了所有这些可能的本地人?多少?为什么它们需要稍后通过串联形成?为什么不发布一个更好的代表你实际想要完成的事情。这种方式似乎误入歧途。
  • 谢谢宏碁。我这样做是为了将任务列表创建为要通过线程执行的字符串。我不提前知道我会得到多少分支,所以我只是将它们收集成一个字符串。当然,我愿意接受更好的方法。
  • 好吧,为什么不将abc 声明为本地,并以索引方式分配给它,即。 abc[i]:=... 以通常的方式。如果您需要从 proc 返回该表,那么只需 return eval(abc) 以便您可以在更高的(例如全局)范围内使用它。无需尝试将 abc 的副作用作为声明的全局变量。

标签: string global local maple expression-evaluation


【解决方案1】:

当您使用 parse 时,它​​的操作就像文本在其自己的文件中或在顶层输入一样。它没有词法范围变量的上下文。

你可以做类似的事情

eval(parse(cat("abc[",1,"]")),convert('abc',`global`)='abc');

如果您想处理多个本地变量,请为 eval 的第二个参数使用一个集合。

我假设你有一些理由来处理字符串形式。对于直接的对象操作,这通常不是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2012-09-17
    • 2021-03-15
    相关资源
    最近更新 更多