【发布时间】:2016-11-13 21:46:11
【问题描述】:
鉴于我的函数直接在头部进行模式匹配,有没有办法让我检查一个函数是否具有与给定输入匹配的模式而不调用它?有点像match?,但用于功能。我不关心when,我只匹配元组中的原子或原子。
例如
def init(:ok) do
...
end
和
check(&init/1, :ok) # return true
check(&init/1, :other) # return false
我正在修改 GenServer 中的状态,使用处理某些输入并忽略其他输入的函数列表。每个函数都接受一个元组,一些状态,如果函数头匹配,则返回修改后的状态,否则返回状态。我现在有一个 try/rescue 包装函数,它不是那么漂亮。输入是可变长度的元组,第一个元素是原子标识符。
【问题讨论】:
-
你想用这个来完成什么?考虑到更多的上下文,我们可能会想出一个更直接的解决方案来解决您的问题。
-
@PatrickOscity 已更新。如果还不清楚,请随时询问。
-
@FilipHaglund 在不执行函数的情况下无法检查函数头是否匹配,但我认为可以通过多种方式使用现有工具实现相同目标。你能展示更多你的代码吗?我很难得到你想要做的事情:|
-
考虑到我的回答被否决了,我想我也错过了你问的问题。我认为您需要某种 case 语句——这通常是我在函数中进行模式匹配的方式。但我想我错过了一些东西。
-
@OnorioCatenacci 我不想在函数中进行模式匹配,而是检查
def init(:ok)是否会在函数头的某个已知输入上引发FunctionClauseError。我想知道我的哪些函数可以处理这个输入,而无需执行它们。
标签: elixir