Elixir :( FunctionClauseError)没有函数子句匹配

Kev*_*ing 7 elixir

我已经制作了这个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)

感谢您的任何帮助.

Dog*_*ert 9

如果没有任何条款匹配,Elixir不会默默地忽略函数调用 - 你得到了一个FunctionClauseError.在这种情况下,当m > n没有_to匹配的函数子句时,所以Elixir抛出该错误.您需要添加其他的版本_to,它接受任何mn(或者你可以添加一个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)