我在Elixir中创建了一个简单函数,该函数将元组的值加1。
我将模块命名为Test,并将函数命名为addToTuple。它采用一个参数,即元组本身。
def addToTuple({X,Y}) do
{X,Y+1}
end
Run Code Online (Sandbox Code Playgroud)
我通过iex编译了模块,并收到以下警告:
warning: this expression will fail with ArithmeticError
Test.ex:68
Run Code Online (Sandbox Code Playgroud)
第68行引用了{X,Y + 1}。当我使用命令Test.addToTuple({4,5})运行该函数时,我不断收到此错误:
** (FunctionClauseError) no function clause matching in Test.addToTuple/1
The following arguments were given to Test.addToTuple/1:
# 1
{4, 5}
Test.ex:67: Test.addToTuple/1
Run Code Online (Sandbox Code Playgroud)
我期望得到{4,6}。
知道这里发生了什么吗?
更新1:
我将X和Y更改为小写,并且有效。但是,这次我对函数进行了一些修改,使其可以与原子一起使用:
def addToTuple({A,x,y}) do
{A,x,y+1}
end
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下命令调用该函数:Test.addToTuple({:F,4,5})。我期待得到{:F,4,6}。但是,我得到了这个错误:
** (FunctionClauseError) no function clause matching in Test.addToTuple/1
The following arguments were given to Test.addToTuple/1:
# 1
{:F, 4, 5}
Test.ex:67: Test.addToTuple/1
Run Code Online (Sandbox Code Playgroud)
我以为使用大写字符会被视为原子?如何解决?
elixir ×1