【问题标题】:Parse and evaluating a string locally?在本地解析和评估字符串?
【发布时间】:2021-03-29 21:04:33
【问题描述】:

对于允许元编程的语言,是否可以在本地解析和评估字符串?例如在一个函数中?我目前正在尝试在 Julia 中执行此操作,但也对其他语言的能力感到好奇?

【问题讨论】:

  • “本地解析和评估字符串”是什么意思?
  • 如果你的意思是像 Meta.parse 和 julia 中的 eval 这样在运行时动态评估字符串,Python、JavaScript 和 Ruby 等最流行的脚本语言也提供了 eval 函数来在运行时动态评估字符串作为表达式。实际上,LISP 是 1958 年第一种使用 eval 的语言。
  • 这样做并不是一个好主意。难道没有其他方法可以实现您想要的吗?
  • 我相信我们需要结束这个问题,除非@Thomas Leyshon 提供了他的确切意思的一些信息。也许其他语言的例子会有所帮助? Meta.parseeval 也是我的候选人 ;-)

标签: julia metaprogramming


【解决方案1】:

这是你的意思吗?

function foo()
    println("Calling foo")
end

function main(functionName)
    functionCall = @eval $(Symbol(functionName))
    functionCall()
end

使用传递的函数名称"foo" 字符串调用main 计算foo

julia> main("foo")
Calling foo

【讨论】:

  • 谢谢@Bebotron!是的,所以沿着这些思路。但我的问题是,如果您在函数中解析和评估,则刚刚解析的变量将存储在全局工作区中。这意味着如果一个人重复调用该函数,全局工作空间将达到其容量并大大减慢(如果不是崩溃)程序。例如:function bar() eval(Meta.parse("c=4")) c_squared = c^2 return c_squared end 。调用bar() 将在全局工作区中产生一个变量 c
  • 抱歉不知道如何制作单独的代码块?
  • @DNF 你能扩展一下吗?例如,什么时候是个好主意?谢谢!
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2023-01-11
  • 2016-04-06
  • 1970-01-01
相关资源
最近更新 更多