【问题标题】:How to represent an anonymous function as a string如何将匿名函数表示为字符串
【发布时间】:2016-03-09 19:39:46
【问题描述】:

我想将像 x->x^2 这样的函数表示为一个字符串 - 简单地执行 string(x->x^2) 是行不通的,有什么办法解决这个问题吗?

【问题讨论】:

  • 你不能使用str = string(:x, :->, :(x^2))之类的东西吗?然后你可以做fun = eval(parse(str))然后执行fun(2)
  • 如果你想在运行时创建动态匿名函数,一种可能性是传递它的Expr等价,这样Expr的字符串解析时间将被保存。
  • 另一个问题是:你为什么需要这个?也许有办法以不同的方式满足您的需求?

标签: string casting type-conversion julia anonymous-function


【解决方案1】:

您可以使用 fun=eval(parse("x->x^2")) 从字符串创建函数,但据我所知,这是一个不可逆的过程。

【讨论】:

  • 好吧,我不能更改 API - 我必须传递一个匿名函数,所以这是不可能的。这很奇怪,虽然没有选择这样做,但我想是时候进行一些改进了。
  • 将已编译的源代码解码为其原始文本字符串并非易事,即使解码器这样做,大多数情况下生成的文本也不会与原始文本完全相同。
【解决方案2】:

仅仅因为某些东西有效,并不意味着它是一个解决方案...假设f 是匿名函数。与f = x->x^2。然后是:

join(map(strip,match(r"line \d*:\n(.*)\n",string(f.code)).captures),"\n")

给予:

return x ^ 2

可以使用来自f.code 的正则表达式提取更多内容。另请注意,这不适用于非匿名函数。这不是一个人应该依赖的东西。也许其他方式来实现该功能是最好的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多