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
模块提供了流(满足Enumerable
和Collectable
),我们可以用推导式来实现一个返回输入内容的大写版本的回声终端:
iex> stream = IO.stream(:stdio, :line)
iex> for line <- stream, into: stream do
...> String.upcase(line) <> "\n"
...> end
现在输入任意字符到终端中,你会看到相应的大写值打印出来.不幸的是,这个例子会使你的IEx壳陷入推导式中,所以你需要敲击两次Ctrl+C
来退出它.:)
以上内容是否对您有帮助:
更多建议: