我已经制作了这个elixir模块,应该打印每个数字,"计数"到你给它的数字.
defmodule Count do
def to(n) do
m = 1
_to(n, m)
end
defp _to(n, m) when (m <= n) do
IO.puts "#{m}"
x = m + 1
_to(n, x)
end
end
Run Code Online (Sandbox Code Playgroud)
...但是当我运行它时,它的执行完全符合预期,但它会在最后抛出此错误.这里发生了什么?
iex(1)> Count.to 5
1
2
3
4
5
** (FunctionClauseError) no function clause matching in Count._to/2
count.exs:6: Count._to(5, 6)
iex(1)>
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助.
如果没有任何条款匹配,Elixir不会默默地忽略函数调用 - 你得到了一个FunctionClauseError.在这种情况下,当m > n没有_to匹配的函数子句时,所以Elixir抛出该错误.您需要添加其他的版本_to,它接受任何m和n(或者你可以添加一个when m > n在那里,如果你想)和什么也不做.
defp _to(n, m) when (m <= n) do
IO.puts "#{m}"
x = m + 1
_to(n, x)
end
defp _to(n, m) do
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13124 次 |
| 最近记录: |