Elixir-参数错误

坐着

有人可以帮忙解释一下为什么会出现参数错误吗?我们不应该这样检查真实性吗?在Elixir 1.3上

iex(1)> true and true
true
iex(2)> "true"
"true"
iex(3)> true
true
iex(4)> true and "true"
"true"
iex(5)> "true" and true
** (ArgumentError) argument error: "true"
乐高积木

Elixir有两组布尔运算符:

  • orand并且not原则上要求它们的参数是实际的布尔值,即原子truefalse
  • ||&&!接受任何类型的参数,然后检查“真实性”。

尽管事实上,or并且and只检查的类型,第一个参数。对于任何值x,表达式false or xandtrue and x都将简单地返回x这似乎令人困惑,但是它允许在递归函数中使用orand作为最后一个表达式,而不会阻止尾递归。例如,考虑以下函数,该函数检查列表中的所有元素是否等于42:

def x([]) do
  true
end
def x([h|t]) do
  h == 42 and x(t)
end

因为and允许尾部递归,所以此函数将在恒定的堆栈空间中运行。如果and要检查其第二个参数的类型,则该函数将必须正常调用一个堆栈帧“ deeper”,并在返回时执行检查并返回值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章