Elixir :into选项

2023-12-16 20:46 更新
在上述例子中,所有推导式都以列表作为返回值.然而,推导式的结果可以被插入不同的数据结构,通过传送:into选项给推导式.

例如,位串发生器可以和:into选项配合使用,来简单地消除字符串中的空格:

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

集合,映射等其它的词典结构也可以被传递给:into选项.通常,:into接受可以实现Collectable协议的任何结构.

一个普遍的:into使用场景是不接触键,就能改变映射中的值:

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

让我们看一个使用流的例子.因为IO模块提供了流(满足EnumerableCollectable),我们可以用推导式来实现一个返回输入内容的大写版本的回声终端:

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

现在输入任意字符到终端中,你会看到相应的大写值打印出来.不幸的是,这个例子会使你的IEx壳陷入推导式中,所以你需要敲击两次Ctrl+C来退出它.:)


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号