- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
**所以,我以前使用过 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)>
最佳答案
只是为了扩展问题以及您收到错误的原因:
大写的标识符被视为原子的别名。例如:
iex(1)> N == :Elixir.N
true
所以当你有以下代码时:
iex(1)> defmodule Test do
...(1)> def foo, do: IO.puts "testing"
...(1)> end
iex(2)> Test.foo
testing
和说的一样
iex(3)> :Elixir.Test.foo
testing
由于大写标识符被视为符号,因此您实际上编写了以下程序:
defmodule Cater do
def cut(0), do: 1
def cut(:Elixir.N) when :Elixir.N>0, do: :Elixir.N + cut(:Elixir.N-1)
end
这是有效的,因为您可以对参数列表中的原子进行模式匹配,并且 :Elixir.N > 0
是一个有效的表达式。
iex(1)> N > 0
true
考虑以下 Elixir 程序和输出:
iex(1)> defmodule Cater do
...(1)> def cut(0), do: IO.puts "cut(0)"
...(1)> def cut(N) when N > 0, do: IO.puts "cut(N)"
...(1)> end
iex(2)> Cater.cut(0)
cut(0)
iex(3)> Cater.cut(N)
cut(N)
iex(4)> Cater.cut(:Elixir.N)
cut(N)
iex(5)> Cater.cut(1)
** (FunctionClauseError) no function clause matching in Cater.cut/1
iex:2: Cater.cut(1)
因此,您收到看似奇怪的错误消息 no function Clause matches in Cater.cut/1
的原因是,您的程序在技术上没有任何问题(除了 的实际函数体) >cut(N)
——它会引发一个 ArithmeticError
,Elixir 在编译时会警告您);它完全有效,只是没有做您想要它做的事/您认为它做的事。
关于erlang - 为什么我在这个从 Erlang 翻译的 Elixir 程序中收到 FunctionClauseError ("no function clause matching")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813039/
我制作了这个应该打印每个数字的 Elixir 模块,“计数”到你给它的数字。 defmodule Count do def to(n) do m = 1 _to(n, m) e
我是 Elixir 的新手,目前正在从 Ruby 进行交易。我正在努力解决我遇到的错误,因为 Elixir 没有 object.class ,我正在努力了解我返回的数据类型以及如何对其进行故障排除。
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我有(我怀疑是)UTC 日期时间。我想将其转换为我的本地时间(该日期时间的名为 America/New_York 的时区)。 我试图关注the Timex docs : > timezone = Ti
我是一名优秀的程序员,十分优秀!