Elixir 衛(wèi)語句中的表達(dá)式

2023-12-14 16:43 更新

Elixir默認(rèn)在衛(wèi)語句中可以使用以下表達(dá)式:

- 比較運(yùn)算符(==,!=,===,!==,>,>=,<,<=)
- 布爾運(yùn)算符(and,or,not)
- 數(shù)學(xué)運(yùn)算符(+,-,*,/)
- 一元運(yùn)算符(+,-)
- 二進(jìn)制連接符`<>`
- 當(dāng)右邊是一個(gè)范圍或列表時(shí),使用`in`操作符
- 下列的所有類型檢查函數(shù):
is_atom/1
is_binary/1
is_bitstring/1
is_boolean/1
is_float/1
is_function/1
is_function/2
is_integer/1
is_list/1
is_map/1
is_nil/1
is_number/1
is_pid/1
is_port/1
is_reference/1
is_tuple/1
- 加上這些函數(shù)
abs(number)
binary_part(binary, start, length)
bit_size(bitstring)
byte_size(bitstring)
div(integer, integer)
elem(tuple, n)
hd(list)
length(list)
map_size(map)
node()
node(pid | ref | port)
rem(integer, integer)
round(number)
self()
tl(list)
trunc(number)
tuple_size(tuple)

此外,用戶可以定義自己的衛(wèi)語句。例如,模塊使用函數(shù)和操作符來定義衛(wèi)語句:Bitwisebnot, ~~~, band, &&&, bor, |||, bxor, ^^^, bsl, <<<, bsr, >>>

注意,盡管例如,,的布爾操作符允許在衛(wèi)語句中使用,但更常用的短路操作符,和卻不被允許。andornot&&||!

記住,衛(wèi)語句中的錯(cuò)誤不會(huì)泄露,只是簡單地讓衛(wèi)語句失?。?/p>

iex> hd(1)
** (ArgumentError) argument error
    :erlang.hd(1)
iex> case 1 do
...>   x when hd(x) -> "Won't match"
...>   x -> "Got: #{x}"
...> end
"Got 1"

如果沒有語句匹配到,會(huì)拋出一個(gè)錯(cuò)誤:

iex> case :ok do
...>   :error -> "Won't match"
...> end
** (CaseClauseError) no case clause matching: :ok

注意匿名函數(shù)也可以擁有多個(gè)衛(wèi)語句:

iex> f = fn
...>   x, y when x > 0 -> x + y
...>   x, y -> x * y
...> end
#Function<12.71889879/2 in :erl_eval.expr/5>
iex> f.(1, 3)
4
iex> f.(-1, 3)
-3

匿名函數(shù)的分語句中參數(shù)的數(shù)量應(yīng)當(dāng)相同,否則會(huì)拋出錯(cuò)誤。

iex> f2 = fn
...>   x, y when x > 0 -> x + y
...>   x, y, z -> x * y + z
...> end
** (CompileError) iex:1: cannot mix clauses with different arities in function definition
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)