【问题标题】:Elixir: decrement map item produces argument errorElixir:递减地图项产生参数错误
【发布时间】:2017-12-15 18:23:21
【问题描述】:

我遇到了一些我没想到的行为……这正常吗?

Interactive Elixir (1.5.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> test = %{a: 0}
%{a: 0}
iex(2)> test.a
0
iex(3)> test.a - 1
-1
iex(4)> test.a -1
** (ArgumentError) argument error
    :erlang.apply(%{a: 0}, :a, [-1])

嗯,解决方法很简单。我只是想明白,为什么会这样。

【问题讨论】:

  • 是的,这是正常的。在这种情况下,它被解析为test.a(-1),因此会产生一个错误。
  • 有趣的是,当你在一个简单的绑定变量a 上尝试它时,你会得到一个更明确的错误:** (CompileError) iex:3: "a -1" looks like a function call but there is a variable named "a", please use explicit parentheses or even spaces
  • 然而,当我尝试 1 -1 时,它并没有像函数调用那样被解析...... :) 猜猜这意味着没有函数只能用数字命名

标签: elixir


【解决方案1】:
test.a - 1

被认为是从 key => 减少 :a

但是

test.a -1

被认为是

test.a(-1) 

就像一些带有一个参数的方法,这就是它显示参数错误的原因。 “test.a”中没有任何方法采用一个参数

【讨论】:

  • 嗯,这确实是有道理的,因为 elixir 允许不带括号的函数调用.. -_- 我应该想到这一点 ;)
  • 旁注: test.a 不能是任何东西,接受 Elixir 中的参数(阅读:它不能是模块函数,)因此这显然是 Elixir 解析器中的一个错误,即应归档。 test.a -1 永远不应被解析为 test.a(-1),因为后者在 Elixir 中是无效语法
猜你喜欢
  • 2021-02-14
  • 2018-08-14
  • 1970-01-01
  • 2023-03-24
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多