我有一个输入一些功能的Elixir模块。我想用自己的功能对其中一个功能进行monkeypatch。那可能吗?我该怎么做?
更新示例
我的具体示例是,对于任务Mix.Tasks.Deps.Compile,我想在'compile'函数中添加一些功能。
https://github.com/elixir-lang/elixir/blob/master/lib/mix/lib/mix/tasks/deps.compile.ex
Mix.Tasks.Deps.Compile模块在Mix框架中已经深深扎根。我想进行最小的更改,同时添加我想要的额外功能。我想添加的功能是cond do块的另一个条件。
答案 0 :(得分:8)
简单的答案是:你不能。在BEAM上没有猴子修补的概念。
更长的答案是BEAM中的模块是延迟加载的,因此您可以用自己的实现替换模块(但是整个模块,而不仅仅是单个函数)。但我真的不确定这是正确的方法。