Elixir 为什么一个字符列表不能显示为一个列表?
我试图用Elixir 为什么一个字符列表不能显示为一个列表?,elixir,Elixir,我试图用Enum.map函数迭代一个字符列表,但它的行为与我期望的不一样 第一行没有将charlist视为char列表,第二行我不理解为什么修改匿名函数会这样做 iex(32)> Enum.map('ABCD',fn(char)->char end) 'ABCD' iex(33)> Enum.map('ABCD',fn(char)->[char] end) ['A', 'B', 'C', 'D'] 我希望第一行返回['A','B','C','D'],第二行返回['A
Enum.map
函数迭代一个字符列表,但它的行为与我期望的不一样
第一行没有将charlist视为char列表,第二行我不理解为什么修改匿名函数会这样做
iex(32)> Enum.map('ABCD',fn(char)->char end)
'ABCD'
iex(33)> Enum.map('ABCD',fn(char)->[char] end)
['A', 'B', 'C', 'D']
我希望第一行返回
['A','B','C','D']
,第二行返回['A'],['B'],['C'],['D']
。为什么不是这样?好的,找到了。。。这是由iex以用户友好的方式显示字符列表引起的。
如果我使用设置:
iex(1)> IEx.configure(inspect: [charlists: :as_lists])
然后,它显示实际输出:)在Elixir中,并且不仅(例如C)char是一个数字,它表示“字符”的ASCII码。另外,“
括号表示一个列表,”
表示二进制文件(或字符串)
因此,这段代码可能会帮助您了解发生了什么:
iex>is\u列表('ABCD')
没错#这是一个列表-如上所述
iex>是二进制的('ABCD')
错#这是字符列表-不是字符串
iex>是二进制的(“ABCD”)
对#带括号,是字符串
iex>is_列表('A')
true#Of cource这是一个列表-包含一个元素的列表。如[65]
iex>[65]
“A”#意外?正如我所说的-char是一个简单的整数!
iex>[65,66,67,68]
“ABCD”#与前一行完全符合逻辑
iex>?A
65#我们用什么?签名以从“字母”中获取“字符”
iex>[?A |“BCD”]
“ABCD”#按预期列出追加工作
iex>[?A |[66,67,68]]
“ABCD”#完全一样
iex>枚举映射('ABCD',fn(字符)->字符结束)
“ABCD”#char“variable”这里是65,66,67,68->映射到列表中[65,66,67,68]
iex>Enum.map('ABCD',fn(字符)->[char]end)
['A'、'B'、'C'、'D']#这里有一个列表。很疯狂?
iex>[[65]、[66]、[67]、[68]]
这是你的名单
这种情况可以归咎于erlang。iex有:charlists
选项,这很好。《长生不老药》中要记住的关键一点是“abc”是[97,98,99]
的简写,但“真实输出”是一个非常错误的措辞<代码>'ABC'=[65,66,67]#⇒ true,因此两个输出完全相等,没有真实的输出<代码>“ABC”确实是一个列表。您在问题中所期望的不是charlists::as_lists
提供的内容。