2016-11-17 34 views
3

我正在運行下面的代碼,它將列表中的數字加上10.但是,我得到了一個字符列表。在Elixir中打印一個列表給出字符串

result = Enum.map([1, 2, 3], fn x -> x + 10 end)

結果 \w\f\r

如果我改變從+*代碼工作正常。 result = Enum.map([1, 2, 3], fn x -> x + 10 end) 如預期的那樣返回[10, 20, 30]

不過,我從10更改爲32的那一刻,我也遇到了類似的錯誤,返回' @'

任何想法,這意味着什麼,以及如何解決它?謝謝

回答

1

在Elixir中,char列表(兩個單引號之間的值'like this')只是一個數字列表。所以,當你有一個數字列表,其中所有的字符都可以寫成字符(在ASCII範圍內)時,iex會爲你打印它們。

iex(1)> 'hello' 
'hello' 
iex(2)> [104, 101, 108, 108, 111] 
'hello' 

你仍然有數字的列表,你仍然可以做它的其他操作就好像它是號碼的列表,如

iex(3)> [104, 101, 108, 108, 111] == 'hello' 
true 
iex(4)> Enum.map 'hello', fn x -> x * 10 end 
[1040, 1010, 1080, 1080, 1110] 

如果IEX內,要查看列表的數字值,可以向列表追加不可查看的字符,例如0,這將強制iex顯示數字列表而不是char列表。

iex(5)> [104, 101, 108, 108, 111] ++ [0] 
[104, 101, 108, 108, 111, 0] 

你可以閱讀更多關於焦炭列表here

+0

謝謝。我最終使用'IO.inspect([11,12,13],char_lists:false)'這是來自一個重複的問題。但是,它似乎不適用於此。有任何想法嗎? 'IO.inspect(for n < - 1..10,multiple_of_3?。(n),do:n * n,char_lists:false)' 返回''\ t $ Q'' – Ming

0

在花好月圓,一個char列表包含代碼點的列表,也可表示爲一個單引號的字符串。

如果您的函數返回一個數字列表,其中這些數字是來自ASCII表內的代碼點,則IEx會將它們表示爲單引號字符串。

iex(5)> [11,12,13] '\v\f\r'

如果其中至少有一個是不是一個ASCII碼點,他們將被表示爲編號的列表:

iex(22)> [11,12,127] [11, 12, 127]

這是一個怪胎如何藥劑(或者elrang,我想)處理character lists and strings

+0

這不是一個真正的「怪異「Elixir如何處理人物列表。來自Erlang的錯誤消息通常作爲字符列表返回,所以將實際文本顯示爲代碼點相當方便。 –

+0

是的。我並不是說消極的古怪。我的意思是「Erlang的一個特性,與其他語言的特性不同」。 – Veen

相關問題