Elixir :into選項(xiàng)

2023-12-16 20:46 更新
在上述例子中,所有推導(dǎo)式都以列表作為返回值.然而,推導(dǎo)式的結(jié)果可以被插入不同的數(shù)據(jù)結(jié)構(gòu),通過傳送:into選項(xiàng)給推導(dǎo)式.

例如,位串發(fā)生器可以和:into選項(xiàng)配合使用,來簡(jiǎn)單地消除字符串中的空格:

iex> for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>
"helloworld"

集合,映射等其它的詞典結(jié)構(gòu)也可以被傳遞給:into選項(xiàng).通常,:into接受可以實(shí)現(xiàn)Collectable協(xié)議的任何結(jié)構(gòu).

一個(gè)普遍的:into使用場(chǎng)景是不接觸鍵,就能改變映射中的值:

iex> for {key, val} <- %{"a" => 1, "b" => 2}, into: %{}, do: {key, val * val}
%{"a" => 1, "b" => 4}

讓我們看一個(gè)使用流的例子.因?yàn)?code>IO模塊提供了流(滿足EnumerableCollectable),我們可以用推導(dǎo)式來實(shí)現(xiàn)一個(gè)返回輸入內(nèi)容的大寫版本的回聲終端:

iex> stream = IO.stream(:stdio, :line)
iex> for line <- stream, into: stream do
...>   String.upcase(line) <> "\n"
...> end

現(xiàn)在輸入任意字符到終端中,你會(huì)看到相應(yīng)的大寫值打印出來.不幸的是,這個(gè)例子會(huì)使你的IEx殼陷入推導(dǎo)式中,所以你需要敲擊兩次Ctrl+C來退出它.:)


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)