您好我想构建一个库,用其他函数调用替换某些函数调用。
module A do
def wrapper
B.foo
end
end
在已编译的程序中,A.wrapper
实际上会调用B.baz
。我已经偶然发现@before_compile
回调,但似乎无法改变调用模块的AST。
所以我得到的就是这个
module A do
use Modifier
@before_compile Modifier
def wrapper
B.foo
end
end
defmodule Modifier do
defmacro __before_compile__(env) do
# Now what?
end
end
答案 0 :(得分:0)
我认为你正在寻找defdelegate/2。
你也可以创建一个宏:
defmodule Mofifier do
defmacro __using__(_) do
quote do
import unquote(__MODULE__)
end
end
defmacro wrapper do
quote do
B.foo
end
end
end
defmodule A do
use Modifier
def something, do: wrapper()
end
答案 1 :(得分:0)
验证@on_definition
属性是否符合您的目的here。很有可能。