** Итак, я работал с Erlang раньше, и мне это очень удобно. Я просто пытаюсь узнать Эликсир.Почему я получаю FunctionClauseError ("no function clause matching") в этой программе Elixir, переведенной из Erlang?
Недавно я пытался перевести пример «ленивых продуктов общественного питания» в эликсир, и я озадачен тем, почему он либо не компилируется, либо компилируется с предупреждением и не работает. Что мне не хватает, здесь; Есть идеи? Код Эрл и «бежать» следующим образом: **
[email protected] ~/dev/erlang
$ cat cater.erl
-module(cater).
-export([cater/1]).
cater(0) -> 1;
cater(N) when N>0 -> N + cater(N-1).
[email protected] ~/dev/erlang
$ erl
Eshell V6.3 (abort with ^G)
1> c("cater.erl").
{ok,cater}
2> cater:cater(10).
56
3>*
Когда я пишу Cater.ex как так, он получает сообщение об ошибке, что не имеет смысла для меня:
[email protected] ~/dev/elix
$ cat Cater.ex
defmodule Cater do
def cut(0), do: 1
def cut(N) when N>0, do: N + cut(N-1)
end
[email protected] ~/dev/elix
$ iex
Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> c("Cater.ex")
Cater.ex:1: warning: redefining module Cater
Cater.ex:3: warning: this expression will fail with ArithmeticError
[Cater]
iex(2)> Cater.cut(10)
** (FunctionClauseError) no function clause matching in Cater.cut/1
Cater.ex:2: Cater.cut(10)
iex(2)>
Arrrrgh! Какой я идиот. Как только я опубликовал это, у меня появилось «чувство», вернулось и отредактировано, и «достаточно», эликсиру не понравился тот факт, что мои переменные имена были капитализированы. Как только я изменил все Ns на n, он правильно скомпилирован и запущен. Так жаль беспокоить y'all – jpsthecelt
Случается лучшим из нас :) – jjbohn
Возможно, вы могли бы сменить название, чтобы люди могли легко получить сообщение: у меня также была эта проблема с попыткой эликсира, где все напоминает erlang, но все по-другому: o) – Pascal