【问题标题】:Erlang's typer deduced weird types for stringsErlang 的 typer 推断出奇怪的字符串类型
【发布时间】:2017-08-14 20:54:58
【问题描述】:

我正在探索 typer,并给了它一个除了以下之外什么都不做的函数:

const_str() -> "qwe".

那家伙的类型推断为:

-spec const_str() -> [101 | 113 | 119,...]

,即“eqw”(嗯?!),然后是这个 '...' 业务。

看起来常量字符串令人困惑typer;我知道我不应该这样使用它们,有原子用于此目的;但是当我试图围绕 typer (以及 Erlang 的类型选项)时,我认为这是令人惊讶和有趣的。谁能解释这里发生了什么? 谢谢!

【问题讨论】:

    标签: types erlang type-systems beam


    【解决方案1】:
    1. Erlang 中的字符串是与字符的 ASCII 码相对应的整数列表(即"qwe" = [$q,$w,$e] = [113,119,101])。
    2. 类型语言无法表达列表元素的顺序(并且不打算这样做)。
    3. 你得到的类型是“一个包含数字 101、113 和 119 的非空列表”,这是推理所能得到的最接近的类型。

    【讨论】:

    • 我当然知道 1 - 我没有想到的是 2。谢谢老哥!
    猜你喜欢
    • 2019-04-27
    • 2016-02-29
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多