gpt4 book ai didi

types - 使用打字机的意外结果

转载 作者:行者123 更新时间:2023-12-04 02:10:58 29 4
gpt4 key购买 nike

我决定在我的一些代码中添加类型定义,并运行 Typer 以获得起点(erlang 15b02,typer 0.9.4)。

我选择了一些结果来检查是否一切正常,发现这个结果我不明白:

par(true, o) -> "(";
par(true, f) -> ")";
par(_, _) -> "".

生成规范:

-spec par(boolean(),'f' | 'o') -> [40 | 41].

我可以理解输入参数,因为这个函数没有导出,我的代码只调用函数, bool 表达式作为第一个参数,原子 o 或 f 作为第二个参数(例如 par(4 > P, o)).

但为什么返回列表不包含空列表? 我期待的是 [40 | 41 | []][40 | 41 | ""]

此代码用于打印数学表达式,优先级或运算符足够时避免括号;例如打印

3 + 4 + 5 * (6 + 7) - sin( x + 7) 而不是

3 + ( 4 + (( 5 * ( 6 + 7 )) - sin(( x + 7))))

我确定调用代码时使用 false 作为第一个参数,如测试覆盖率结果所示:

    15..|  par(true, o) -> "(";
15..| par(true, f) -> ")";
308..| par(_, _) -> "".

最佳答案

作为 Erlang type specification , [X] 表示“零个或多个 X 类型元素的列表”。在您的例子中,X40 | 41, 所以 "(", ")", "()()""" 都匹配这个类型。无法将恰好包含一个元素的列表表示为类型规范。

具有至少一个元素的列表可以指定为 [X,...]。 typer 说 [40 | 41] 而不是 [40 | 41,...] 暗示它知道该函数可以返回一个空列表。

关于types - 使用打字机的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786615/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com