【问题标题】:First-class patterns in Erlang?Erlang 中的一流模式?
【发布时间】:2015-06-02 20:41:04
【问题描述】:

Erlang 中是否支持 first-class patterns

f(SomeMagicPattern) ->
  receive
    SomeMagicPattern -> ok
  end.

如果答案是否定的(支持),您知道实现此目的的其他方法吗?例如,使用宏?

【问题讨论】:

    标签: macros erlang language-features first-class


    【解决方案1】:

    不,Erlang 没有开箱即用的一流模式。 有两种实现方式:

    1. 宏。广泛使用,例如在 EUnit 和 PropEr 等测试工具中。比如说,EUnit 有一个 ?assertMatch 宏,它实际上是一流模式的一个示例:

      ?assertMatch({ok, _}, 结果)

    2. 解析转换。更难编写,但可能更强大,因为使用它们你可以访问 Erlang 抽象代码并以任何你想要的方式完全重写它。这里有一个很好的链接到一系列关于解析转换的教程:Is there a good, complete tutorial on Erlang parse transforms available?

    【讨论】:

    • Erlang 没有一流的模式是我们在ETS 和跟踪中具有匹配模式 的原因。不优雅但必要。
    【解决方案2】:

    demeshchuk 指出情况并非如此。

    然而,有人提议添加类似于该语言的内容:

    http://www.erlang.org/eeps/eep-0029.html

    这是否是一个好主意是一个完全不同的问题......

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 2015-02-09
      • 2015-03-18
      • 2014-06-27
      • 2017-07-09
      • 2014-05-31
      • 2015-05-06
      • 1970-01-01
      • 2016-04-20
      相关资源
      最近更新 更多