Elixir:模式匹配和类型规范之间的冲突。

时间:2014-05-13 04:42:14

标签: pattern-matching static-analysis elixir

如果我有一个函数的多个子句,其类型规格为:
i)@spec foo(number):: string
ii)@spec foo(string):: number
iii)@spec foo(tuple):: string

当我用元组调用foo时(在单元测试中),它会首先尝试模式匹配条款i)和ii),然后iii)或者它会立即检查iii)因为i)和ii)显然没有静态分析。

1 个答案:

答案 0 :(得分:3)

函数模式按源顺序匹配,因此它将从1开始,然后是2,然后是3.透析器足够聪明,知道foo({1, 2})匹配其中一个有效的类型规范,但不会失败。