【问题标题】:erlang change a fun environmenterlang 换个好玩的环境
【发布时间】:2018-11-21 21:09:41
【问题描述】:

是否可以在不干扰有关函数定义和 lambda 提升的代码的情况下更改 erlang fun 的环境变量?

具体来说,我想明确更改具有此信息的乐趣环境中的 pid():

[{pid,<12036.68.0>},
 {module,expl},
 {new_index,7},
 {new_uniq,<<197,235,209,205,33,163,202,255,8,58,234,128,135,166,147,185>>},
 {index,7},
 {uniq,103767694},
 {name,'-test_no_pid/0-fun-1-'},
 {arity,0},
 {env,[<12036.69.0>]},
 {type,local}]

乐趣的作用并不重要,因为我希望这个解决方案是一个通用的解决方案,它只是改变乐趣环境中的所有 pid。

【问题讨论】:

  • 根据我们的私下讨论,我认为您需要的只是一种在环境变化的情况下创造新乐趣的方法。

标签: function erlang environment pid info


【解决方案1】:

不,这会破坏 fun 作为常量值的引用透明度属性。这与更新元组的字段没有什么不同,这种破坏性的更改甚至可能导致垃圾收集器崩溃,因为它违反了关于指针方向的内部假设。

【讨论】:

  • 你知道另一种获取函数抽象代码的方法吗,因为它在这种情况下没有作为环境的一部分出现?
  • 如果模块是使用 debug_info 标志编译的,您可以稍后从梁文件中的块中提取此信息。它包含模块的整个扩展语法树。
  • 我在问题中添加了一个不同的维度:如何通过更新的环境创造新的乐趣?
猜你喜欢
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多