首页 > 解决方案 > 为什么我的 iex 在运行此函数时返回“-C”或“-A”

问题描述

我已经学习 Elixir 一段时间了,但今天我遇到了一些让我完全困惑的事情。

我做了这个过滤功能:

thingy = for a <- ["may", "lay", "45", "67", "bay", "34"], do: Integer.parse(a)
for {n, _} <- thingy, do: n

output: '-C"'

完全出乎意料的输出,但下面的版本“有效”

parseds = for i <- [ "10", "hot dogs", "20" ], do: Integer.parse(i)
for {n, _} <- parseds, do: n

output: [10, 20]

但是,如果我将数字更改为 45 和 65 之类的数字,我会得到'-A'结果。

这只是允许我使用我喜欢的数字的底层二进制函数吗?

标签: erlangelixirerlang-otpelixir-iex

解决方案


这是因为Elixir 和 Erlang 一样,内部没有 String 类型。单引号字符串表示为字符列表,这些通常在处理 Erlang 库时使用。当您将列表提供给 Elixir 时[45, 67, 34],它会将其显示为ASCII 字符 46、67 和 34的列表;是-,C".

如果列表中至少有一个数字不代表可打印字符,您会看到数字列表。因为10不映射到可打印字符,所以在第二个示例中,您会看到10and 20

请务必注意,您创建的列表仍然在内部表示,[45, 67, 34]因此您执行的任何列表操作都将完全按照您对数字的预期工作。


推荐阅读