Elixir do/end块
目前,我们已经学习了四种控制结构:,,和,它们都包含了块。所以我们也能够以如下方式写语句:
case
cond
if
unless
do/end
if
iex> if true, do: 1 + 2
3
注意在和之间有一个逗号,这是因为Elixir中参数之间要以逗号隔开。我们称这种格式为关键字列表。我们也可以用关键字来传递:true
do:
else
iex> if false, do: :this, else: :that
:that
do/end
块形式是在关键字形式的语法上经过化简所得的。这就是为什么块形式不要求参数与块之间用逗号隔开。它消除了在书写块代码时的冗余信息。下列两种语法作用是相同的:do/end
iex> if true do
...> a = 1 + 2
...> a + 10
...> end
13
iex> if true, do: (
...> a = 1 + 2
...> a + 10
...> )
13
需要记住的是在使用块时,它们总是和最外层的函数调用捆绑在一起。例如:do/end
iex> is_number if true do
...> 1 + 2
...> end
** (CompileError) undefined function: is_number/2
会被解释成:
iex> is_number(if true) do
...> 1 + 2
...> end
** (CompileError) undefined function: is_number/2
产生错误的原因是Elixir试图调用函数,却得到了两个参数(表达式也会产生错误,因为需要它的第二个参数,也就是块)。添加明确的括号能够消除歧义:is_number/1
if true
if
do/end
iex> is_number(if true do
...> 1 + 2
...> end)
true
关键字列表在语言中扮演着重要的角色,在许多函数与宏中都很常见。在之后的章节中我们会继续他;探索它。现在,让我们谈谈"二进制,字符串和字符列表"。