elixir Enum.filter的意外输出

时间:2013-09-09 02:00:32

标签: elixir

我正在学习Elixir,我从PragProg的书“Programming Elixir”中得到的一个例子就是:

iex(25)> (1..10) |> Enum.map(&(&1*&1)) |> Enum.filter(&(&1 < 20))
[1, 4, 9, 16]

输入代码后,我尝试了一下,我写道:

iex(26)> (1..10) |> Enum.map(&(&1*&1)) |> Enum.filter(&(&1 > 20))   
[25, 36, 49, 64, 81, 100]

很好,这是预期的结果。现在我写这样的话:

iex(27)> (1..10) |> Enum.map(&(&1*&1)) |> Enum.filter(&(&1 > 40))   
'1@Qd'

为什么我会收到这个奇怪的'1@Qd'字符串?

2 个答案:

答案 0 :(得分:4)

它不是elixir中的错误,因为方法[]应该像在erlang中一样返回新的list

但是对于具有32和255之间的unicode编号的符号,它将以Unicode(默认设置)返回其表示。

iex(25)> [31]
[31]
iex(26)> [32]
' '
iex(27)> [255]
'ÿ'
iex(28)> [256]
[256]

但是当您使用+pc unicode启动erlang时,它会解码更多symbols

 erl +pc unicode
 Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]

 Eshell V5.10.1  (abort with ^G)  
 1> [1024].
 "Ѐ"
 2> [1070,1085,1080,1082,1086,1076].
 "Юникод" 

答案 1 :(得分:1)

“入门指南中的2.3字符串(二进制文件)和字符列表(列表)”可能与此主题相关。

http://elixir-lang.org/getting_started/2.html