[英]Why does my iex return a '-C' or a '-A' when I run this function
我已經學習Elixir已有一段時間了,但是今天我遇到了一些使我完全困惑的事情。
我做了這個過濾功能:
thingy = for a <- ["may", "lay", "45", "67", "bay", "34"], do: Integer.parse(a)
for {n, _} <- thingy, do: n
output: '-C"'
完全出乎意料的輸出,但“工作”下面的版本
parseds = for i <- [ "10", "hot dogs", "20" ], do: Integer.parse(i)
for {n, _} <- parseds, do: n
output: [10, 20]
但是,如果我將數字更改為45和65 '-A'
類的結果,則會得到'-A'
。
這僅僅是允許我使用喜歡的數字的基本二進制函數嗎?
這是因為Elixir和Erlang一樣,內部沒有String類型 。 單引號字符串表示為字符列表,這些字符串通常在處理Erlang庫時使用。 當您為Elixir提供列表[45, 67, 34]
45、67、34 [45, 67, 34]
,它將顯示為ASCII字符列表46、67和34 ; 分別是-
, C
和"
。
如果列表中至少有一個數字不代表可打印字符,則會看到數字列表。 因為10
不會映射到可打印的字符,所以在第二個示例中,您看到10
和20
。
重要的是要注意,您創建的列表在內部仍表示為[45, 67, 34]
因此您執行的任何列表操作都將完全按照您期望的數字進行工作。
這是因為Elixir與Erlang一樣,內部沒有String類型
不管什么意思。 弦樂,雜物。 就像這樣簡單:
iex(4)> [45, 67, 34]
'-C"'
在iex中,數字列表被解釋為字符序列,其中每個數字都是某個字符的數字代碼。 如果查看ASCII圖表 ,您將看到:
45 -> -
67 -> C
34 -> "
看這個:
iex(5)> 'hi' == [104, 105]
true
在Elixir中, [104, 105]
和[45, 67, 34]
45,67,34 [45, 67, 34]
被稱為字符列表。 創建字符列表[104, 105]
的快捷方式是'hi'
。 這是Erlang 可怕功能的結果,但是由於Elixir能夠與Erlang交互,因此需要字符列表。 Elixir字符列表等效於Erlang字符串,而Erlang字符串等效於數字列表。
假設您的Elixir程序進行了大量的關鍵數學計算,結果是:
result = [76, 64, 78, 79]
並且您想向用戶顯示該信息,以便他們可以調整除顫器的設置以挽救患者的生命,因此您可以執行以下操作:
IO.puts "Set the defibrillator dials to these numbers: #{result}"
用戶將看到以下內容:
Set the defibrillator dials to these numbers: L@NO
患者在這里死亡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.