【问题标题】:Is "new" in Erlang part of the official standard and should we use it?Erlang 中的“新”是官方标准的一部分吗?我们应该使用它吗?
【发布时间】:2010-02-23 01:46:59
【问题描述】:

我问这个问题是因为我注意到很多 OpenSource Erlang 项目使用“new”将参数传递给 Erlang 模块,但同时我听说“new”不是官方语言的一部分,可能不是如果它包含错误,则支持。在我自己的项目中使用它之前,我想澄清一下这个问题。

更新: 从那以后,我在 Erlang 官方邮件列表中询问了答案:

http://www.erlang.org/cgi-bin/ezmlm-cgi?4:mss:49535:201002:aicfhmngkhodmclhlnak

【问题讨论】:

    标签: erlang new-operator


    【解决方案1】:

    没有官方的 Erlang 标准,因此很难成为其中的一部分。

    OTP/Erlang 团队似乎只认为功能是官方的,前提是他们已经记录了这些功能。参数化模块(即功能名称)没有记录。 OTP/Erlang 团队决定做的是尽可能接近 Erlang 标准。

    就我个人而言,我不认为让 Erlang 看起来像它不是的东西有什么吸引力。它只会让语言有更多的规则可以了解和教授,只会让那些期望一切都像他们过去的 OO 背景一样的人失望。增加复杂性并不强大。

    在实现方面(许多利用的抽象)参数化模块目前只是模块名称和参数化模块的“实例变量”的元组。所以它只是一个隐藏了一些参数的外部函数调用。

    【讨论】:

    • 但是这么多 erlang 项目使用参数化模块不是时候 Erlang 团队记录它们的时候了。如果他们要删除它们,那么很多项目都会中断。
    • 我应该联系谁来澄清这一点。是 Erricson 还是 Joe Armstrong?
    • 如果很多项目要避免使用未记录的功能,那么如果这些功能被删除,它们就不会中断。
    • 我不同意“新”符合 Erlang 的最佳利益。它的问题之一是每个函数调用都有隐式参数。这使得该模块与其他模块的推理变得更加困难;它不一定与透析器或 TypEr 等工具配合得很好。它是对以前调用匿名函数的方法(在 fun Mod:Fun/Arityfun() -> Exp end 之前)的一种破解,但仅此而已。这并不是真正的惯用语,老实说,这让我很担心,因为它会鼓励人们尝试以 OO 方式编程,而这在 Erlang 中不应该这样做。
    • 不使用M = Mod:new(State) 以及使用THIS-module(Name,Params),而是明确地处理每个函数中的状态:dict:find(Dict,Key)(这里,Dict 是状态)。这实际上是参数化模块所做的一切。它将State 参数隐藏在您绑定到的变量中,然后在每次调用时使其隐含。
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2017-04-11
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多