codecamp

Elixir do/end块

目前,我们已经学习了四种控制结构:,,和,它们都包含了块。所以我们也能够以如下方式写语句:

casecondifunlessdo/endif
iex> if true, do: 1 + 2
3

注意在和之间有一个逗号,这是因为Elixir中参数之间要以逗号隔开。我们称这种格式为关键字列表。我们也可以用关键字来传递:truedo: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/1if trueifdo/end

iex> is_number(if true do
...>  1 + 2
...> end)
true

关键字列表在语言中扮演着重要的角色,在许多函数与宏中都很常见。在之后的章节中我们会继续他;探索它。现在,让我们谈谈"二进制,字符串和字符列表"。


Elixir if和unless
Elixir UTF-8和Unicode
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Elixir 基本操作符

Elixir 二进制,字符串和字符列表

Elixir 类型规格与行为

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }