我有一个宏,它将catch-all函数放在模块的末尾,因此生成的模块看起来像:
defmodule Module1 do
<module body>
## Generated catch-all functions
def fun1(_, _), do: :ok
## ..more catch-all functions...##
end ## of module
我试图解决的问题是禁止警告
&#34;此子句无法匹配,因为第XX行的前一个子句始终匹配&#34;如果宏的用户将具有,例如</ p>
def fun1(arg1, arg2), do: ...
在模块的正文中。
我想我可以通过模块的身体AST并在生成全部捕获函数之前对函数签名进行一些分析,但这似乎是很多工作。还有其他办法吗?
答案 0 :(得分:1)
(我想你知道这个解决方案,但也许对其他SO用户来说回答这个问题很有用:))
正如José所说,在代码中隐藏太多是不太好的做法,因为它可能导致意外(隐藏代码可以做一些你不希望做的事情),甚至可以限制你(特别是如果你有明确的捕获,你就无法摆脱它......)。
我认为最好的方法是明确使用宏来生成所有样板代码。调用宏的一行不是样板;)