【发布时间】:2015-05-15 04:48:01
【问题描述】:
有没有办法在不查看源代码的情况下查看函数的守卫?
给定一个示例函数(在 Elixir 中):
def divide(x, y) when y != 0 do
x / y
end
在没有访问源代码的情况下,如何确定在 divide/2 上有一个守卫,以及如何找到有关该守卫的信息或该守卫对模式匹配的期望?
我在 Ruby Conf 2014 上观看了 Chris McCord(Elixir 的 Phoenix 框架的创建者)的演讲。在演讲中,Chris 描述了守卫,有人问是否有一种方法可以检查函数以显示该函数的守卫。
这是谈话中的问题:
https://www.youtube.com/watch?v=5kYmOyJjGDM&t=5188
这个问题是在视频的 t= 时间之后不久提出的。
【问题讨论】:
-
只是好奇——这里的用例是什么?守卫条件不应该帮助你避免编写糟糕的代码吗?因此,如果您违反了保护条件,请重新编写代码。
-
我也只是好奇。我可以想象的一个用例是一个受保护的函数,(例如)只允许 1 到 10 之间的数字。怎么知道呢?答案肯定是“查看文档”或“查看源代码”,但我希望会有诸如“只需使用
SomeModule.show_guards/1函数并传递感兴趣的函数”之类的答案。
标签: erlang elixir arity pattern-guards