erlang - 为什么我的 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'
结果。
这只是允许我使用我喜欢的数字的底层二进制函数吗?
解决方案
这是因为Elixir 和 Erlang 一样,内部没有 String 类型。单引号字符串表示为字符列表,这些通常在处理 Erlang 库时使用。当您将列表提供给 Elixir 时[45, 67, 34]
,它会将其显示为ASCII 字符 46、67 和 34的列表;是-
,C
和"
.
如果列表中至少有一个数字不代表可打印字符,您会看到数字列表。因为10
不映射到可打印字符,所以在第二个示例中,您会看到10
and 20
。
请务必注意,您创建的列表仍然在内部表示,[45, 67, 34]
因此您执行的任何列表操作都将完全按照您对数字的预期工作。
推荐阅读
- python - Pandas 按列函数拆分 DataFrame 并分组
- google-cloud-dataflow - BigtableToAvro 始终挂起:ping 错误 Deadline 已超过
- angular - 延迟加载的脚本路径在生产构建中无法正常工作
- mysql - 如何通过更新数据库来更新使用 Elementor 创建的 WordPress 页面?
- python - 如何在 Python 中从 CSV 创建多维数组
- node.js - 当firebase函数超时或崩溃时如何获取邮件?
- c# - 用于网页的 ASP.NET 搜索框
- here-api - {n}.base.maps.cit.api.here.com 的发现服务抛出错误
- pygame - 为什么我的 pyinstaller 可执行文件不能访问数据文件?
- performance - 如何在groovy中创建具有特定元素大小的随机uuid列表