【问题标题】:Elixir: conflict between pattern matching and type specification.Elixir:模式匹配和类型规范之间的冲突。
【发布时间】:2014-05-13 13:44:11
【问题描述】:

如果我有一个函数的多个子句,以及它们的类型规范:
i) @spec foo(number)::string
ii) @spec foo(string):: number
iii) @spec foo(tuple):: string

当我用元组调用 foo 时(在单元测试中),它会首先尝试与子句 i) 和 ii) 进行模式匹配,然后是 iii) 还是会立即检查 iii),因为 i) 和 ii)显然无法进行静态分析。

【问题讨论】:

    标签: pattern-matching static-analysis elixir


    【解决方案1】:

    函数模式按源顺序匹配,因此它会从 1 开始,然后是 2,然后是 3。Dialyzer 足够聪明,可以知道 foo({1, 2}) 匹配一个有效的类型规范,并且不会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2015-12-20
      • 2017-04-25
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多