2

我正在探索typer,并给它一个函数,除了:

const_str() -> “qwe”。

那家伙的类型推断为:

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

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

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

4

1 回答 1

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