- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,如果您有一个模块
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/
在编写 Phoenix 应用程序时,我已经习惯使用如下语法编写链接:link "My profile", to: Routes.user_url(@conn, :show, user) .最近与 Li
我正在开发一个 Vanilla Elixir/Phoenix 应用程序,并按照 Programming Phoenix 中的一般步骤进行操作。预订以实现基本的登录和注销系统(请参阅下面的片段)。但是,
我在哪里 对于此示例,请考虑 Friends.repo 表Person具有字段:id、:name、:age Ecto 查询示例: iex> from(Friends.Person 中的 x,其中:[{
默认情况下,我的 Phoenix 应用程序会在大约 5 行日志输出中记录有关每个 HTTP 请求的基本信息。只要我将日志级别设置为 :debug ,我可以看到每个请求的方法、路径、 Controlle
我是一名优秀的程序员,十分优秀!