W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
Elixir裝載了許多內(nèi)置協(xié)議.在上一章,我們討論了?Enum
?模塊,任何數(shù)據(jù)結(jié)構(gòu)只要實(shí)現(xiàn)了?Enumerable
?協(xié)議就可以使用模塊中提供的函數(shù):
iex> Enum.map [1, 2, 3], fn(x) -> x * 2 end
[2, 4, 6]
iex> Enum.reduce 1..3, 0, fn(x, acc) -> x + acc end
6
另一個(gè)有用的例子是String.Chars
協(xié)議,它指定了如何將字符轉(zhuǎn)化為字符串.它暴露于to_string
函數(shù):
iex> to_string :hello
"hello"
注意Elixir中的字符串插值調(diào)用了?to_string
?函數(shù):
iex> "age: #{25}"
"age: 25"
上述片段能夠工作是因?yàn)閿?shù)字實(shí)現(xiàn)了?String.Chars
?協(xié)議.如果傳送一個(gè)元組,就會出現(xiàn)錯(cuò)誤:
iex> tuple = {1, 2, 3}
{1, 2, 3}
iex> "tuple: #{tuple}"
** (Protocol.UndefinedError) protocol String.Chars not implemented for {1, 2, 3}
當(dāng)需要"打印"一個(gè)更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)時(shí),可以簡單地使用基于Inspect
協(xié)議的inspect
函數(shù):
iex> "tuple: #{inspect tuple}"
"tuple: {1, 2, 3}"
?Inspect
?協(xié)議的作用是約定如何將任何數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為可讀的文本表示.這就是IEx用來打印結(jié)果的工具:
iex> {1, 2, 3}
{1, 2, 3}
iex> %User{}
%User{name: "john", age: 27}
記住,處于方便,如果被檢查后的值以#開頭,這表明著該數(shù)據(jù)結(jié)構(gòu)使用了非法的Elixir語法.這意味著檢查協(xié)議是不可逆的,因?yàn)樾畔⒂锌赡茉谥型緛G失:
iex> inspect &(&1+2)
"#Function<6.71889879/1 in :erl_eval.expr/5>"
Elixir中還有許多協(xié)議,但以上是最普遍的.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: