簡體   English   中英

當我運行此函數時,為什么我的iex返回“ -C”或“ -A”

[英]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不會映射到可打印的字符,所以在第二個示例中,您看到1020

重要的是要注意,您創建的列表在內部仍表示為[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM