我決定在我的一些代碼中添加類型定義,然後我運行Typer獲取起點(erlang 15b02,typer 0.9.4)。使用typer出乎意料的結果
我挑了一些成果,以檢查是否每一件事情是好的,發現了這個結果,我不明白:
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))))
。
我確信該代碼被稱爲虛假作爲第一參數如由測試覆蓋的結果:
15..| par(true, o) -> "(";
15..| par(true, f) -> ")";
308..| par(_, _) -> "".
謝謝,我不記得...的含義,儘管它被用於其他結果。 – Pascal