我刚开始利用朱莉娅。我试图使用eval(在Julia中)来定义函数中的一组变量。假设我想设置v1等于2:
function fun_test(varargs...)
v1 = 0;
if length(varargs) > 0
j = collect(linspace(1,length(varargs)-1,length(varargs)/2));
for i in j
expr_vargs = parse("$(varargs[i]) = $(varargs[i+1]);");
eval(expr_vargs);
end
end
println(v1)
end
调用函数为:
fun_test("v1", "2");
它不起作用,因为println返回0(v1的初始值)。但是,如果我在Julia的终端中运行一个类似的eval调用,那么它就可以工作了。
能否请您澄清一下为什么不起作用以及如何修复?
eval
在toplevel范围内运行,而不是在函数范围内运行。不能在函数范围内动态更新绑定。在不知道您的精确用例的情况下,我怀疑有一种方法可以在没有动态重新绑定的情况下完成事情。特别是,v1
、v2
等可能最好做成数组,v
。
然而,如果您确实必须这样做,您可以始终将v1
定义为子模块中的全局变量:
module FunTest
v1 = 0
function fun_test(varargs...)
if length(varargs) > 0
j = collect(linspace(1,length(varargs)-1,length(varargs)/2));
for i in j
@eval $(varargs[i]) = $(varargs[i+1])
end
end
println(v1)
end
export fun_test
end
using .FunTest
fun_test(:v1, 2) # result: 2
(我还修改了您的代码,以避免解析
ing字符串,这最好通过表达式插值来完成。)
Julia有一个非常好的特性,可以访问自己的语法树,这使得以编程方式生成新函数变得很容易,但它比普通的Julia代码慢得多。 例如: 有没有办法给提供与普通Julia代码相同的速度? @Ivarne建议我提供我的项目的细节。我想使用Julia的元编程功能来计算符号导数并运行它们。 我编写了一个函数,它接受and表达式和一个参数,并返回一个新表达式,该表达式是相对于的导数。不幸的是,结果需要太长时间
我很难处理压缩文件,例如:
本文向大家介绍说说你对eval的理解相关面试题,主要包含被问及说说你对eval的理解时的应答技巧和注意事项,需要的朋友参考一下 不安全的, 容易出错, 因为你不知道你传入的参数是什么鬼 性能底下. 某种情况下跟new Function(), setTimeout, setInterval类似 不利于代码可维护性, 可拓展性 不是在无可奈何的情况下, 请不要使用
本文向大家介绍Shell中eval的用法示例,包括了Shell中eval的用法示例的使用技巧和注意事项,需要的朋友参考一下 功能说明:告知shell取出eval的参数,重新运算求出参数的内容。 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。 参 数:参数不限数目,彼此之间用分号分开。 1.执行命令行之前扫描它两次,再次运算求出参数的内容。 将
问题内容: 我在玩耍时偶然发现了Python中的一个函数。我想不出需要此功能的情况,除了可能是语法糖。谁能举一个例子? 问题答案: 并且是一种方便快捷的方法,可以动态地获取一些源代码,也许要稍加修改然后再执行- 但是,它们从来不是最好的方法,尤其是在生产代码中,而不是“快速而又简单”脏”的原型&c。 例如,如果我不得不处理这样的动态Python源代码,那么我会使用ast模块-比得多(比它更安全(您
本文向大家介绍Python中的exec、eval使用实例,包括了Python中的exec、eval使用实例的使用技巧和注意事项,需要的朋友参考一下 通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果(exec不返回结果,print(eval("…"))打印None); 这里有个scope(命名空间,