gpt4 book ai didi

elixir - 包裹灵药模块

转载 作者:行者123 更新时间:2023-12-02 06:57:06 24 4
gpt4 key购买 nike

例如,如果您有一个模块

defmodule Foo do
# lots of "unknown" functions
end

如何为 Foo 创建包装模块,例如:

defmodule Bar do
# wrap all functions in Foo
end

但是在 Bar 中,我想公开 Foo 中的所有函数,但另外我想在每个函数中添加一些代码,特别是我想 try/捕获 可能出现在任何 Foo.Error 异常中的特定错误...我想在不为 Foo 中的每个函数添加函数的情况下执行此操作>,因为这会重复。

我可以用宏来做到这一点吗?

最佳答案

AFAIU,您想通过复制类之间的继承逻辑来执行某种面向对象的编程。但这并不是您可能已经知道的 Elixir 等任何函数式编程语言的哲学。

但是,如果这真的是你想做的,我发现 this question它使用元编程,旨在做与您正在寻找的类似的事情。虽然看起来很复杂。

编辑:在我们进一步交谈后,我更好地理解了您的问题。如果您想定义函数而不需要太多重复,那么元编程就是您的最佳选择!这是一个简单的示例,说明如何通过元编程在模块中定义多个函数:

defmodule MyModule do
Enum.each ~w(method1 method2), fn(method_name) ->
def unquote(:"#{method_name}")(), do: unquote(method_name)
end
end

I'd like to do this without adding a function for each function in Foo, since that will get repetetive.

我想这就是我会做的,但你确定它会那么重复吗?

您还可以使用Exceptional lib这将帮助您编写更少的错误处理函数:)

关于elixir - 包裹灵药模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com