亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解釋為char列表的靈丹妙藥列表

解釋為char列表的靈丹妙藥列表

解釋為char列表的靈丹妙藥列表我剛開始用藥劑。我正在使用ExUnit為我自己實現的簡單可枚舉函數編寫一些測試,而不使用標準Enum模塊。在我的測試中,我發現每當我引用列表[7, 8, 9],一旦打印成stdout,我就看到了char列表。'\a\b\t'..為什么會發生這種事?
查看完整描述

2 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

長生不老藥有兩種字符串:二進制(雙引號)和字符列表(單引號)。后者是從Erlang繼承的,內部表示為整數列表,這些整數映射到字符串的代碼點。

當您使用類似于inspectIO.inspect,Elixir試圖變得聰明,并將整數列表格式化為字符串,以便于閱讀。但是,在某些情況下,因為列表中的所有整數恰好都是有效的代碼點,所以最終得到的是一個無意義的字符串。例如,A到Z在ASCII中表示為整數65到90。

iex> IO.inspect [65, 66, 67]
'ABC'

如果您喜歡打印原始列表,則可以使用charlists: :as_lists選擇。有關選項的完整列表,請啟動iex和類型h Inspect.Opts.

iex> IO.inspect [65, 66, 67], charlists: :as_lists
[65, 66, 67]

如果藥劑<1.4,您可以使用char_lists: false.

順便說一句,這并不是Elixir向您隱藏底層構建塊的唯一情況,它還會發生在二進制文件(雙引號字符串)和結構中。

更深層次的原因是Elixir和Erlang沒有用戶定義的類型,因此無法區分列表和單引號字符串,因為它們都是列表。然而,在其他情況下,這也是一種優勢。例如,它允許我們在Elixir和Erlang中對任何數據結構進行瑣碎的序列化,因為它只能從語言附帶的基本構建塊中構建。


查看完整回答
反對 回復 2019-07-09
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

雖然@Patrick的答案是絕對正確的,但您也可以配置IEx總是顯示charlists作為常規列表,而不是手動調用inspect每次:

iex> IEx.configure(inspect: [charlists: :as_lists])# => :okiex> [65, 66, 67]# => [65, 66, 67]iex> 'ABC'# => [65, 66, 67]

這是一個支持選項的完整列表


查看完整回答
反對 回復 2019-07-09
  • 2 回答
  • 0 關注
  • 432 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號