【发布时间】:2015-06-12 22:26:37
【问题描述】:
**所以,我以前使用过 Erlang,并且对它非常满意。我只是想学习 Elixir。
我最近试图将一个“懒惰的餐饮服务商”示例翻译成 elixir,但我很困惑为什么它要么无法编译,要么编译时出现警告并且无法正常工作。我在这里错过了什么;有任何想法吗? erlang代码和'run'如下:**
jps@GRASSKEET ~/dev/erlang
$ cat cater.erl
-module(cater).
-export([cater/1]).
cater(0) -> 1;
cater(N) when N>0 -> N + cater(N-1).
jps@GRASSKEET ~/dev/erlang
$ erl
Eshell V6.3 (abort with ^G)
1> c("cater.erl").
{ok,cater}
2> cater:cater(10).
56
3>*
当我这样写 Cater.ex 时,它会出现一个对我来说没有意义的错误:
jps@GRASSKEET ~/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
jps@GRASSKEET ~/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)>
【问题讨论】:
-
哎呀!我真是个白痴。当我发布这个时,我有一种“感觉”,回去编辑,“果然”,elixir 不喜欢我的变量名大写的事实。一旦我将所有 N 更改为 n,它就会正确编译并运行。很抱歉打扰大家
-
发生在我们最好的人身上:)
-
也许您可以更改标题,以便人们可以轻松检索您的帖子:我在尝试 elixir 时也遇到了问题,所有内容都提醒 erlang,但一切都不一样 :o)
-
所以,如果我更加关注 elixir-lang.org 网站上名为“Erlang/Elixir Syntax: A Crash Course”的部分,我会看到一个突出显示的部分这个错误。不过,总的来说,我发现到目前为止我看到的 Elixir 错误消息并不是很具有描述性。消息让我想起了我曾经在 Fortran 编译器中看到的一些神秘错误。我猜是“早期”。
标签: erlang elixir variable-names