Erlang 的 typer 推断出奇怪的字符串类型
Erlang's typer deduced weird types for strings
我正在探索 typer,并为它提供了一个函数,它只做:
const_str() -> "qwe".
推导出那个人的类型为:
-spec const_str() -> [101 | 113 | 119,...]
,即“eqw”(哈?!),然后是这个“...”业务。
看起来常量字符串令人困惑typer;我知道我不应该像这样使用它们,因为有原子用于此目的;但是当我试图围绕 typer(和 Erlang 的类型选项)思考时,我认为这是令人惊讶和有趣的。谁能解释这里发生了什么?
谢谢!
- Erlang 中的字符串是与字符的 ASCII 代码(即
"qwe" = [$q,$w,$e] = [113,119,101]
)相对应的整数列表。
- 类型语言无法表达列表元素的顺序(并且不打算这样做)。
- 你得到的类型是"a nonempty list containing numbers 101, 113 and 119"的类型,这与推断所能得到的最接近。
我正在探索 typer,并为它提供了一个函数,它只做:
const_str() -> "qwe".
推导出那个人的类型为:
-spec const_str() -> [101 | 113 | 119,...]
,即“eqw”(哈?!),然后是这个“...”业务。
看起来常量字符串令人困惑typer;我知道我不应该像这样使用它们,因为有原子用于此目的;但是当我试图围绕 typer(和 Erlang 的类型选项)思考时,我认为这是令人惊讶和有趣的。谁能解释这里发生了什么? 谢谢!
- Erlang 中的字符串是与字符的 ASCII 代码(即
"qwe" = [$q,$w,$e] = [113,119,101]
)相对应的整数列表。 - 类型语言无法表达列表元素的顺序(并且不打算这样做)。
- 你得到的类型是"a nonempty list containing numbers 101, 113 and 119"的类型,这与推断所能得到的最接近。