我和Range一起玩Elixir
.
它工作正常:
>1..10 |> Enum.map fn(x) -> x |> IO.puts end >1 >.. >10 >[:ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok]
但这里有错误:
>'a'..'z' |> Enum.map fn(x) -> x |> IO.puts end ** (Protocol.UndefinedError) protocol Range.Iterator not implemented for 'a' /Users/elix_lang/lib/elixir/lib/range.ex:7: Range.Iterator.impl_for!/1
我来自Ruby
熟悉,Erlang
我想了解问题是什么?
谢谢!!!
关于第一个,我认为如果你只想迭代范围,可以使用Enum.each.
iex(1)> 1..10 |> Enum.each fn(x) -> IO.puts(x) end iex(2)> 1..10 |> Enum.each &IO.puts(&1) 1 2 ... :ok
关于第二个选项,一个选项可能如下(尽管可能有更好的方法).
iex(3)> ?a..?z |> Enum.each &IO.puts(String.from_char_list!([&1])) a b ... :ok iex(4)> ?a..?z |> Enum.map(&String.from_char_list!([&1])) |> IO.puts abcdefghijklmnopqrstuvwxyz :ok
[2.3字符串(二进制)和字符列表(列表)]在下面介绍了一些字符列表(?a等) http://elixir-lang.org/getting-started/binaries-strings-andchar -lists.html
提供的答案不再适用于elixir 1.4.1,因为不推荐使用String.from_char_list/1.您现在可以生成如下字符列表:
?a..?z |> Enum.to_list |> List.to_string