Elixir do/end塊

2023-12-14 16:47 更新

目前,我們已經(jīng)學(xué)習(xí)了四種控制結(jié)構(gòu):,,和,它們都包含了塊。所以我們也能夠以如下方式寫語句:

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

注意在和之間有一個逗號,這是因為Elixir中參數(shù)之間要以逗號隔開。我們稱這種格式為關(guān)鍵字列表。我們也可以用關(guān)鍵字來傳遞:truedo:else

iex> if false, do: :this, else: :that
:that

do/end塊形式是在關(guān)鍵字形式的語法上經(jīng)過化簡所得的。這就是為什么塊形式不要求參數(shù)與塊之間用逗號隔開。它消除了在書寫塊代碼時的冗余信息。下列兩種語法作用是相同的:do/end

iex> if true do
...>   a = 1 + 2
...>   a + 10
...> end
13
iex> if true, do: (
...>   a = 1 + 2
...>   a + 10
...> )
13

需要記住的是在使用塊時,它們總是和最外層的函數(shù)調(diào)用捆綁在一起。例如: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

產(chǎn)生錯誤的原因是Elixir試圖調(diào)用函數(shù),卻得到了兩個參數(shù)(表達式也會產(chǎn)生錯誤,因為需要它的第二個參數(shù),也就是塊)。添加明確的括號能夠消除歧義:is_number/1if trueifdo/end

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

關(guān)鍵字列表在語言中扮演著重要的角色,在許多函數(shù)與宏中都很常見。在之后的章節(jié)中我們會繼續(xù)他;探索它?,F(xiàn)在,讓我們談?wù)?二進制,字符串和字符列表"。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號