我想执行一个字符串,但发现execJulia中没有函数:
a = 1
println(exec("a")) # ERROR: exec not defined
Run Code Online (Sandbox Code Playgroud)
有没有办法在Julia中执行字符串?
最初的问题是我正在尝试记录变量列表:
thingsToLog = ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
提交:
open(logFile, "w") do io
for thing in thingsToLog
write(io, @sprintf("%s = %s\n", thing, eval(thing)))
end
end
Run Code Online (Sandbox Code Playgroud)
如上所述,您可以调用parse从字符串创建AST,然后调用eval它.但是,在您的示例中,创建列表似乎更容易
thingsToLog = [:a, :b, :c]
Run Code Online (Sandbox Code Playgroud)
避免通过parse.通常,将这样的引用AST(在本例中为符号)直接传递给更简单,更安全eval; 如果使用固定的AST集合还不够,您也可以将AST插入到引用的AST中(有关更多详细信息,请参阅手册).
谈到以下几点时要谨慎eval:
关于本地范围内的评估,阅读这个帖子让我意识到大部分所需的功能已经存在于Debug软件包中,所以我刚刚发布了一个允许这样做的更新(上面的注意事项仍然适用).要在本地范围内评估代码的函数必须用@debug_analyze宏包装.然后,您可以使用检索表示本地范围的对象@localscope,并通过使用相应的符号索引从中检索局部变量的值.例:
using Debug
@debug_analyze function f(x,y,z,thingsToLog)
s = @localscope
for sym in thingsToLog
println(sym, " = ", s[sym])
end
end
f(1,2,3,[:x,:z])
Run Code Online (Sandbox Code Playgroud)
打印
x = 1
z = 3
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅软件包自述文件中的此部分Debug.
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |