我决定在我的一些代码中添加类型定义,并运行 Typer 以获得一个起点(erlang 15b02,typer 0.9.4)。
我选择了一些结果来检查是否一切正常,发现这个结果我不明白:
par(true, o) -> "(";
par(true, f) -> ")";
par(_, _) -> "".
产生规范:
-spec par(boolean(),'f' | 'o') -> [40 | 41].
我可以理解输入参数,因为该函数没有导出,并且我的代码仅以布尔表达式作为第一个参数调用该函数,而原子 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(_, _) -> "".