Elixir Char列出了代码点原子

Elixir Char列出了代码点原子,elixir,Elixir,当我在iex上写下这些的时候 iex> 'hełło' 它向我展示了代码点 [104, 101, 322, 322, 111] 我知道,因为单引号字符串表示字符列表。但当我在iex中输入带有上述数字的列表时,它会显示一个带有数字的列表,而不是hełło iex(13)> [104, 101, 322, 322, 111] [104, 101, 322, 322, 111] 为什么不显示字符? 我打字的时候 iex(3)> a = [67,55,44] 进入ie

当我在iex上写下这些的时候

iex> 'hełło'  
它向我展示了代码点

[104, 101, 322, 322, 111]  
我知道,因为单引号字符串表示字符列表。但当我在iex中输入带有上述数字的列表时,它会显示一个带有数字的列表,而不是hełło

iex(13)> [104, 101, 322, 322, 111] 
[104, 101, 322, 322, 111]
为什么不显示字符?
我打字的时候

iex(3)> a = [67,55,44]
进入iex,我有以下角色

'C7,'
当我想要iex显示数字而不是字符时,该怎么办?
为什么我可以在这里传递一个原子作为算术

iex> to_string :hello
"hello"
当您检查列表(或查看iex中的返回值)时,Elixir将检查列表是否只包含有效的代码点。如果是这种情况,它将以字符串表示形式打印列表,否则将以列表形式打印。字符列表也只是整数列表,因此同样的规则适用于这些整数。观察其中一些示例,了解char列表实际上只是列表:

# '' for example is the same as an empty list []
iex> ''
[]

# a char list with valid codepoints will be printed as string
iex> 'A'
'A'

# a char list with invalid codepoints will be printed as list
iex> 'A' ++ [0]
[65, 0]

# a list with only valid codepoints will also be printed as string
iex> [65]
'A'
这意味着字符列表没有什么特别的,只是整数列表。现在恰巧字符列表无法处理UTF8字符。它们主要用于Erlang互操作性,因为我们需要一种来回转换“Erlang字符串”的方法。如果我没有弄错的话,Erlang也不知道如何处理字符列表中的UTF8,因此出于历史原因,它可能以这种方式实现

但是,Elixir足以将字符列表文字中的UTF8字符转换为适当的代码点,因此您可以稍后将其转换为二进制并获得适当的UTF8字符:

# UTF8 codepoints are not valid for char lists
iex> 'hełło'
[104, 101, 322, 322, 111]

# however you can convert a list with UTF8 codepoints to a binary
iex> to_string('hełło')
"hełło"
Iex内部使用inspect协议打印返回值。但是,如果手动调用inspect,则可以传递其他选项。例如,要查看字符列表的代码点:

iex> IO.puts inspect('hello', char_lists: false)
[104, 101, 108, 108, 111]
:ok
如果您想查看二进制文件的代码点:

iex> IO.puts inspect("hello", binaries: :as_binaries)
<<104, 101, 108, 108, 111>>
:ok
也就是说,如果您使用Elixir,那么您应该真正地使用二进制文件而不是字符列表。字符列表通常只在与使用它们的Erlang代码交互时有用。

当您检查列表(或查看iex中的返回值)时,Elixir将检查列表是否只包含有效的代码点。如果是这种情况,它将以字符串表示形式打印列表,否则将以列表形式打印。字符列表也只是整数列表,因此同样的规则适用于这些整数。观察其中一些示例,了解char列表实际上只是列表:

# '' for example is the same as an empty list []
iex> ''
[]

# a char list with valid codepoints will be printed as string
iex> 'A'
'A'

# a char list with invalid codepoints will be printed as list
iex> 'A' ++ [0]
[65, 0]

# a list with only valid codepoints will also be printed as string
iex> [65]
'A'
这意味着字符列表没有什么特别的,只是整数列表。现在恰巧字符列表无法处理UTF8字符。它们主要用于Erlang互操作性,因为我们需要一种来回转换“Erlang字符串”的方法。如果我没有弄错的话,Erlang也不知道如何处理字符列表中的UTF8,因此出于历史原因,它可能以这种方式实现

但是,Elixir足以将字符列表文字中的UTF8字符转换为适当的代码点,因此您可以稍后将其转换为二进制并获得适当的UTF8字符:

# UTF8 codepoints are not valid for char lists
iex> 'hełło'
[104, 101, 322, 322, 111]

# however you can convert a list with UTF8 codepoints to a binary
iex> to_string('hełło')
"hełło"
Iex内部使用inspect协议打印返回值。但是,如果手动调用inspect,则可以传递其他选项。例如,要查看字符列表的代码点:

iex> IO.puts inspect('hello', char_lists: false)
[104, 101, 108, 108, 111]
:ok
如果您想查看二进制文件的代码点:

iex> IO.puts inspect("hello", binaries: :as_binaries)
<<104, 101, 108, 108, 111>>
:ok

也就是说,如果您使用Elixir,那么您应该真正地使用二进制文件而不是字符列表。字符列表通常只在与使用它们的Erlang代码交互时有用。

我不明白你的最后一个问题。你只是把一个原子转换成一个字符串,也许你可以更详细地解释你的问题是什么?我不明白你的最后一个问题。你只是把一个原子转换成一个字符串,也许你可以更详细地解释你的问题是什么?对于字符列表,我想它就是ASCII字符集。对于字符列表,我想它就是ASCII字符集。