Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 为什么一个字符列表不能显示为一个列表?_Elixir - Fatal编程技术网

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
提供的内容。