elixir macro defoverridable 功能
基于macro 的包装函数可以使用defoverridable 可以方便进行方法的重写
参考使用
- app.ex
defmodule App do
defmacro __using__(_options) do
quote do
def init do
IO.puts "do init"
end
def login do
IO.puts "do login"
end
def app_init do
init()
login()
end
defoverridable init: 0,login: 0
end
end
end
- demo.ex
defmodule Demo do
use App
def init() do
IO.puts "override do init"
end
end
- 效果
如果demo 中没有重写init 会输出
但是因为我们重写了init 方法,效果如下
说明
此方法还可以应用到Behaviour 中,phoenix 的pipeline 就使用了此方法
参考资料
https://blog.appsignal.com/2021/10/26/how-to-use-macros-in-elixir.html
https://hexdocs.pm/elixir/1.12/Kernel.html#defoverridable/1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-01-03 nginx-clojure 调试简单试用
2023-01-03 dremio 表函数简单说明
2023-01-03 nginx-clojure java 集成试用
2023-01-03 apache drill 提供的physical-operators 以及说明
2023-01-03 dremio 数据存储结构示例
2022-01-03 castled 运行试用
2022-01-03 反向ETL 一些参考知识