当我 运行 这个函数时,为什么我的 iex return 是 '-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"'
完全出乎意料的输出,但是版本低于'works'
parseds = for i <- [ "10", "hot dogs", "20" ], do: Integer.parse(i)
for {n, _} <- parseds, do: n
output: [10, 20]
但是,如果我将数字更改为 45 和 65 之类的值,我会得到 '-A'
作为结果。
这只是允许我使用我喜欢的数字的底层二进制函数吗?
这是因为Elixir, like Erlang, doesn't internally have a String type. Single-quoted strings are represented as character lists, and these are commonly used when dealing with Erlang libraries. When you give Elixir the list [45, 67, 34]
, it displays it as a list of ASCII characters 46, 67, and 34;分别是 -
、C
和 "
。
如果列表中至少有一个数字不代表可打印字符,您会看到数字列表。因为 10
没有映射到可打印字符,所以在第二个示例中,您会看到 10
和 20
.
请务必注意,您创建的列表在内部仍表示为 [45, 67, 34]
,因此您执行的任何列表操作都将完全按照您对数字的预期进行。
This is because Elixir, like Erlang, doesn't internally have a String type
不管那是什么意思。字符串,Smings。就这么简单:
iex(4)> [45, 67, 34]
'-C"'
在 iex 中,数字列表被解释为字符序列,其中每个数字都是某个字符的数字代码。如果您查看 ascii chart,您会看到:
45 -> -
67 -> C
34 -> "
看看这个:
iex(5)> 'hi' == [104, 105]
true
在 Elixir 中,[104, 105]
和 [45, 67, 34]
被称为字符列表。创建 charlist [104, 105]
的快捷方式是 'hi'
。这是 Erlang 糟糕 特性的结果,但是因为 Elixir 能够与 Erlang 接口,所以需要 charlists。一个 Elixir charlist 相当于一个 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
患者在这里死亡。
我学习 Elixir 已经有一段时间了,但今天我遇到了一些让我完全困惑的事情。
我做了这个过滤功能:
thingy = for a <- ["may", "lay", "45", "67", "bay", "34"], do: Integer.parse(a)
for {n, _} <- thingy, do: n
output: '-C"'
完全出乎意料的输出,但是版本低于'works'
parseds = for i <- [ "10", "hot dogs", "20" ], do: Integer.parse(i)
for {n, _} <- parseds, do: n
output: [10, 20]
但是,如果我将数字更改为 45 和 65 之类的值,我会得到 '-A'
作为结果。
这只是允许我使用我喜欢的数字的底层二进制函数吗?
这是因为Elixir, like Erlang, doesn't internally have a String type. Single-quoted strings are represented as character lists, and these are commonly used when dealing with Erlang libraries. When you give Elixir the list [45, 67, 34]
, it displays it as a list of ASCII characters 46, 67, and 34;分别是 -
、C
和 "
。
如果列表中至少有一个数字不代表可打印字符,您会看到数字列表。因为 10
没有映射到可打印字符,所以在第二个示例中,您会看到 10
和 20
.
请务必注意,您创建的列表在内部仍表示为 [45, 67, 34]
,因此您执行的任何列表操作都将完全按照您对数字的预期进行。
This is because Elixir, like Erlang, doesn't internally have a String type
不管那是什么意思。字符串,Smings。就这么简单:
iex(4)> [45, 67, 34]
'-C"'
在 iex 中,数字列表被解释为字符序列,其中每个数字都是某个字符的数字代码。如果您查看 ascii chart,您会看到:
45 -> -
67 -> C
34 -> "
看看这个:
iex(5)> 'hi' == [104, 105]
true
在 Elixir 中,[104, 105]
和 [45, 67, 34]
被称为字符列表。创建 charlist [104, 105]
的快捷方式是 'hi'
。这是 Erlang 糟糕 特性的结果,但是因为 Elixir 能够与 Erlang 接口,所以需要 charlists。一个 Elixir charlist 相当于一个 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
患者在这里死亡。