【问题标题】:How to monkeypatch module function in Elixir如何在 Elixir 中猴子补丁模块功能
【发布时间】:2016-03-19 13:58:00
【问题描述】:

我有一个 Elixir 模块,它可以导入一些函数。我想用我自己的猴子补丁其中一个功能。那可能吗?我该怎么做?

示例更新

我的具体示例是任务 Mix.Tasks.Deps.Compile,我想在“编译”函数中添加一些功能。

https://github.com/elixir-lang/elixir/blob/master/lib/mix/lib/mix/tasks/deps.compile.ex

Mix.Tasks.Deps.Compile 模块在 Mix 框架中根深蒂固。我想做最小的改变,同时添加我想要的额外功能。我要添加的功能是 cond do 块的另一个条件。

【问题讨论】:

  • 这引出了一个问题——你为什么要这样做?有什么具体的例子吗?在 BEAM 上可能有更简洁的方法。
  • @cdegroot,请看添加的例子
  • 请在问题中发布任何示例,而不是链接到它们
  • 对于这种特殊情况,推荐的操作方式似乎是在您自己的模块中扩展您的功能(当然,您可以疯狂地使用元编程来拼接单个条件 ;-) ) 然后使用 Mix 的别名系统将“编译”别名为您的编译。请参阅elixir-lang.org/docs/stable/mix/Mix.html,“别名”标题。

标签: elixir


【解决方案1】:

简单的答案是:你不能。 BEAM 上没有猴子修补的概念。

更长的答案是 BEAM 中的模块是延迟加载的,因此您可以将模块替换为您自己的实现(但整个模块,而不仅仅是单个函数)。但我真的不确定这是正确的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2011-10-06
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    相关资源
    最近更新 更多